1、String对象创建对象的两种方法
String str1="Health";//常量池中创建
Strinng str2=new String("Health");//堆中创建
System.out.println(str1==str2);//false
2、String类型的常量池比较特殊
*String a=“aaa”;//在常量池中创建
*String a=“aaa”; String b=a.intern(); a==b//这个b直接指向a中在常量池中创建的aaa
3、String字符串拼接问题:
String str1="aaa";
String str2="bbb";
String str3="aaa"+"bbb";//常量池
String str4=str1+str2;//堆
String str5=str1+"bbb";//堆
String str6="aaabbb";//常量池
System.out.println(str3==str4);//false
System.out.println(str4==str5);//false
System.out.println(str5==str6);//false
System.out.println(str6==str3);//true
4、8种包装类型和常量池:
~Byte、Short、Integer、Long、Character、Boolean;这五种包装类默认创建了数值为【-128,127】的相应类型的缓存数据,只要超出就会创建新的对象。
~两个浮点类型Float、Double没有实现常量池技术。
Integer i1=120;
Integer i2=120;
System.out.println(i1==i2);//true
Integer i3=128;
Integer i4=128;
System.out.println(i3==i4);//false
Integer i5=-129;
Integer i6=-129;
Sysout.println(i5==i6);//false
Integer比较丰富的例子
Integer i1=new Integer(40);
Integer i2=new Integer(40);
Integer i6=new Integer(0);
Integer i3=40;
Integer i4=40;
Integer i5=0;
System.out.println(i1==i2);//false
System.out.println(i1==i2+i6);//true
System.out.println(i3==i4);//true
System.out.println(i3==i4+i5);//true
System.out.println(40==i6+i2);//true
语句i1==i2+i6这样的语句并不适合Integer,他会直接执行拆箱转换成int类型,这样就直接比较的是值。