基本数据类型之间的运算规则:
这里只讨论七种数据类型间的运算,不包含Boolean类型。
-
自动类型转换:
范围由低到高:
byte 、char、 short --> int --> long --> float --> double
容量小的数据类型的变量和容量大的数据类型的变量一起运算,结果自动提升为容量大的数据类型。
特别的,当byte、short、char三种类型的变量做运算时结果为int类型(eg:short 和short做运算用int接受)。 -
强制类型转换:
/*
强制类型转换
1,需使用强转符()
2,强制类型转换可能导致精度损失
*/
class VariableTest2
{
public static void main(String[] args)
{
double d1=12.9;
int i1=(int)d1; //截断操作,只取整数部分
System.out.println(i1);
}
}
- 变量运算规则的两个特殊情况
编码情况一:
①情形一:(编译通过)
class VariableTest2
{
public static void main(String[] args)
{
long l=123213; //没有以 l结尾,竟然没有报错
System.out.println(l);
}
}
末尾少加l没有报错,原因是123213这个数默认是int型了,int型赋值给long型,属于自动类型转换。所以不报错。
②情形二:(编译不通过)
class VariableTest2
{
public static void main(String[] args)
{
long l=123213; //没有以 l结尾,竟然没有报错
System.out.println(l);
long l1=213354655562;
System.out.println(l);
}
}
报错,213354655562已经超过了int的范围;即”long l1=213354655562l;“(若末尾加上l,就不会报错,可以完整输出)
注意:
float f1=12.3;若此句末尾不加f,会报错,编译失败。因为12.3不加f默认为double型,double型向float转会报错,所以必须加f。
编码情况二:
整型常量默认类型为int型,浮点型常量默认为double型
class VariableTest2
{
public static void main(String[] args)
{
byte b=12;
byte b1=b+1; //编译失败
float f1=b+12.3; //编译失败
}
}
字符串类型String
①String不是基本数据类型,属于引用数据类型;
②声明时用一对"";
③String可以与8种基本数据类型变量做运算,且运算只能是连接运算(+),并且运算结果仍为String类型。
class StringTest
{
public static void main(String[] args)
{
int number=1001;
String numberStr="学号:";
String info=numberStr+number; //+为连接运算,拼一起
boolean b1=true;
String info1=info+b1;
System.out.println(info1);
}
}
- 练习
class StringTest
{
public static void main(String[] args)
{
char c='a'; //A:65 a:97
int num=10;
String str="hello";
System.out.println(c+num+str);//1o7hello
System.out.println(c+str+num);//ahello10
System.out.println(c+(num+str));//a10hello
System.out.println((c+num)+str);//107hello
System.out.println(str+num+c);//hello10a
}
}
- 练习
实现打印输出内容:* *(星号tab键星号):
class StringTest
{
public static void main(String[] args)
{
System.out.println("* *");//√
System.out.println('*'+'\t'+'*');//×:'*'对应一个Ascll码,与后面做的是加法运算,结果为int型,int再与后面运算仍未int型
System.out.println('*'+"\t"+'*');//√:中间为String型,+表示连接运算,\t为制表符
System.out.println('*'+'\t'+"*");//×:前面两个做一次加法运算,后面做一次连接运算
System.out.println('*'+('\t'+"*"));//√:后面两项先运算,结果为string再与前面连接
}
}
注:练习二中1和4最后都应该为int型(P60)
进制(常识,了解)
对应:
class BinaryTest
{
public static void main(String[] args)
{
int num1=0b110;
int num2=110;
int num3=0127;
int num4=0x110A;
System.out.println("num1="+num1);
System.out.println("num2="+num2);
System.out.println("num3="+num3);
System.out.println("num4="+num4);
}
}
都呈现为10进制
最高位是符号位。0为正,1为负
十进制转化为二进制(除2取余的逆)例如:13–>1101
二进制转八进制(三个看作一位)及二进制转16进制(四个看作一位)
八进制转二进制(一个数拆成三位)及十六进制转二进制(一个数拆成四位)拼一起: