【Java深入浅出】基本类型篇
java中有哪些基本数据类型?占用的字节是多少?对应包装器类型是什么?
不同的基本类型之间是否可以相互赋值(哪些类型间赋值可隐式转换)
byte byteNum = 1;
char charNum = 2;
short shortNum = 3;
int intNum = 4;
long longNum = 5;
float floatNum = 6;
double doubleNum = 7;
charNum = byteNum; //编译错误,不可隐式转换
shortNum = byteNum;
intNum = charNum;
longNum = intNum;
floatNum = longNum;
doubleNum = floatNum;
从上面代码的结果来看,boolean除外,7个基本类型间根据其可表示的数据范围,有明显的地位高低(较大范围类型的变量可以承接住较小范围类型变量的赋值)。基于该特征,7种类型排列组合后整理的可赋值汇总表如下:
不同的基本类型进行运算符运算之后类型是否会变
byte byteNum = 1;
char charNum = 2;
short shortNum = 3;
int intNum = 4;
long longNum = 5;
float floatNum = 6;
double doubleNum = 7;
byte byteNum2 = byteNum + byteNum; //编译错误,byte与byte相加,会变为int类型(冷知识)
float floatNum2 = floatNum + charNum;
double doubleNum2 = doubleNum + floatNum;
从上面代码结果来看,基本上还是谁拳头大听谁的,结果是参与运算的变量里范围最大的类型。但是几个小弟(short、char、byte)间的规则有点特殊,总结汇总如下:
解析:short、char、byte、int之间参与运算的话,统一变为int类型,其余的情况符合“变为参与运算类型较大的类型”的规律。
类里的成员如果是基本数据类型, 那么会自动初始化吗?初始化成什么?
会, 初始化为0或者false。
代码中出现的具体数字直接数会被当成什么类型?
float num1 = 123;
float num2 = 123.0; //编译错误
float num3 = 123.0f;
整数会自动作为int,小数会自动作为double,所以要给float变量赋值,小数必须显示增加f标识。
基本类型与其对应的包装类型进行 == 比较,比较的是地址还是值?
Integer num5 = 128;
int num6 = 128;
System.out.println(num5==num6);
上述结果为true。包装类型会自动拆包,比较两者的值。
Integer包装类型之间使用==比较,比较的是地址还是值?
Integer num1 = 128;
Integer num2 = 128;
System.out.println(num1==num2);
Integer num3 = 127;
Integer num4 = 127;
System.out.println(num3==num4);
结果是false,true。比较的是对象的地址。
解析:num1跟num2是两个Integer对象,地址不相等。由于JVM为Integer准备了-128到127的整形常量池,num3、num4都指向同一个对象(常量池里127对应的Integer对象)。
自动拆箱、自动装箱发生在哪个阶段?编译阶段还是运行时?
自动拆装箱是一种语法糖,在编译阶段,Java平台自动为我们做了转换,以保证不同写法在运行时等价(生成的字节码一致)。
自动装箱:Integer num = 1 自动转换为 Integer num = Integer.valueOf(1);
自动拆箱:int number = num 自动转换为 int number = num.intValue();
- 点赞
- 收藏
- 关注作者
评论(0)