String
字符串不可变:创建好的字符串对象不可变,字符串的引用可以指向其他的字符串。
所以引用类型除String之外,都必须使用new创建对象。
由于String类型使用的频率高,所以java提供了使用字符串字面量创建对象的方式。
String str = “hello world”//创建一个字符串对象,用引用str指向这个对象的内存地址。
编译器相关内容:
编译的过程中,遇到一些使用纯字面量的表达式,会进行运算,将运算结果保存。这样做会节省运算开销。---- 提供运算效率
int a = 5+5;//编译后:int a = 10;
int b = 10;
int c = b+10;//编译后:int c = b+10;
String str2 = "123java";
String str3 = "123"+"java";//编译后:str3 ="123java"
System.out.println(str2 == str3);// true对
String str4 = "12"+"3java";// str2 == str4 , true
String str5 = 1+2 +"3java"; // str5编译之后 str5 = "33java"
String str6 = '1'+2+"3java"; // str6编译之后str6= "513java"
String str7 = "123";
String str8 = str7+"java";
System.out.println(str2 == str8); // false.
//只有使用字面量赋值才会使用到常量池中存在的对象,new表示创建新对象,那么不会使用常量池中的对象。
String s = “123”;
String s1 = s+“java”; // 不是字面量赋值,也不使用常量池中的对象。
String s2 = new String(“123java”);// – 新创建的对象。