基本数据类型
byte 1字节 8位
char 2字节
short 2字节
int 4字节
float 4字节
double 8字节
long 8字节
boolen 1字节
包装类
Integer i = 1
等价于Integer i = Integer.valueOf()
机制:当通过自动装箱机制创建包装类对象时,首先会判断数值是否在-128—-127的范围内,如果满足条件,则会从缓存(常量池)中寻找指定数值,若找到缓存,则不会新建对象,只是指向指定数值对应的包装类对象,否则,新建对象。
String
String s1 = new String("aaa"); String s2 = new String("aaa"); System.out.println(s1 == s2); // false String s3 = s1.intern(); String s4 = s2.intern(); System.out.println(s3 == s4); // true
public native String intern();
这是String类中的intern()方法native
关键字的作用:这个关键字修饰的方法为本地方法,intern 方***从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中
如果是采⽤用 "bbb" 这种字⾯面量量的形式创建字符串串,会⾃自动地将字符串串放⼊入 String Pool 中。
String s5 = "bbb"; String s6 = "bbb"; System.out.println(s5 == s6); // true
数据之间的转换
short s = 1; s = s + 1;//类型转换异常 1 为int类型 s 为short类型 s = (short)(s +1); // 正确 向下转型 或 隐式转换 s += 1; s++; //原理就是向下转型 只不过没有显式出来
- 为什么 Java 的 +=、-=、*=、/= 复合赋值运算符不需要强制转换?
直到今天,我认为例如:
i += j;
只是一个捷径:
i = i + j;
但是,如果我们尝试这样做:
int i = 5;
long j = 8;
然后i = i + j;不会编译但i += j;会编译正常。
这是否意味着实际上i += j;是这样的快捷方式 i = (type of i) (i + j)