GC: 垃圾回收机制
java中的垃圾回收 不需要开发人员手动地清理 jvm虚拟机会不定时清理垃圾
垃圾: 指在堆内存中没有任何的引用对象
System.gc(); 可以建议虚拟机进行清理
Object:
基本数据类型的包装类: 包装类有自己的方法和属性
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
hashCode() ; 哈希码 表示的是 通过一系列的计算 对象在内存中的地址
哈希码不是严格意义上的地址,而是通过地址计算出的值
自动装箱 拆箱: 1.5以后的新特性 基本数据类型和包装类之间的转换
自动装箱: Integer n1=100; //基本数据类型 自动转换成包装类
底层: 调用了Integer的valueof方法 Integer n1=Integer.Valueof(100);
拆箱: Integer n2=n1; 自动拆箱 把包装类转换成基本数据类型
Integer要特别注意他的缓存问题: 如果数不在[-128,127]之间 那么就自动new一个Integer对象 看源码
测试代码:
public class Test { public static void main(String[] args) { Integer n1=20; Integer n2=20; System.out.println(n1==n2); Integer m1=200; Integer m2=200; System.out.println(m1==m2); } }
结果:
true false
String:
equals 如果没重写就是==
string是重写了equals的 string里的equals比较的是值
如果要比较对象要用==
char 能否存储一个汉子? 能 在java中汉字由2个byte组成 正好占16位
public static void main(String[] args) { String s1=new String("abc"); String s2="abc"; String s3="abc"; String s4="abcdf"; String s5=s2+"df"; System.out.println(s1==s2); System.out.println(s2==s3); System.out.println(s4==s5); }
结果:false true false
当使用+号拼接的时候其实是重新创建了一个对象 但是常量池中的值其实只有一份
StringBuffer和StringBuilder
StringBuffer是线程安全的
StringBuilder是线程不安全的
StringBuffer和StringBuilder是可变的字符序列(动态的)
String是不可变的
当系统中有很多拼接字符串行为时 用StringBuffer和StringBuilder 避免创建过多的String对象