基本数据类型

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)