- 基本类型
- 作为面向对象语言,为了方便引入了基本类型
- boolean 1或4字节
- 没有定义类型的字节码,跟据jvm实现有时用int代替
- 据说[]boolean是1个,boolean直接用int类型是4个
- byte 1个字节
- short 2个字节
- char 2个字节
- gbk, gb2312这种2字节编码,一个汉字存一个char。utf-8一个字用3字节
- int 4个字节
- long 8个字节
- float 4个字节
- double 8个字节
- 包装类型
- 不可变(immutable)类
- Boolean, Byte, Short, Character, Integer, Long, Float, Double
- 享元
- Integer i1 = 120, i2 = 120, i3 = 130, i4 = 130;
- i1 == i2; i3 != i4
- 数字小于1字节(-128 — 127)后 , 内部存在IntegerCache中,这是一种享元模式
- 自动折装箱(java5)
- Integer iObj = 3; # 装箱
- iObj + 12; # 折箱
- 字符串
- 不可变(immutable)类, 用cahr数组实现
- 字面量处理 String str = “abc”
- String s = new String(“abc”) 放堆里
- 定义引用变量str
- 栈中查找”abc”, 有则返回地址,没有则开辟地址,再创建String对象,对象指向该地址, 该地址标记对象引用
- 放在栈的静态区(static segement)里
- str指向地址, 所以str保存了一个指向栈中数据的引用
- “a”+“b” 会编译成使用StringBuilder
- 泛型
- 字面量
- Map<String, Integer> a = new HashMap<>(); # 后面的菱形操作符做了类型推断
- f(new HashMap<>) # 传值使用菱形操作符