关于String的题目
String内存位置、StringBuffer、StringBuilder区别
- new String(),其实是在堆中新创建一个空间来存储地址,该地址指向常量池
- 常量+常量->常量池
- 变量+常量->堆
我自己的理解可能有误,例如name="L",此时我的name指向的是常量池的,所以拿name去==比较时他是常量池的
而我把name作为变量与其他String相加的时候,它就是作为变量相加,所以相加后的结果就为堆
其实也就第四题比较疑惑
/*--------------------------1-----------------------------*/
public static void main(String[] args) {
String a = "a1";
String b = "a" + 1;
System.out.println(a == b);//true
}
/*--------------------------2-----------------------------*/
public static void main(String[] args) {
String ab = "ab";
String b = "b";
String ab2 = "a" + b;
System.out.println(ab == ab2);//false
}
/*--------------------------3-----------------------------*/
public static void main(String[] args) {
String ab = "ab";
final String b = "b";
String ab2 = "a" + b;
System.out.println(ab == ab2);//true
}
/*--------------------------4-----------------------------*/
public static void main(String[] args) {
String ab = "ab";
final String b = getBB();
String ab2 = "a" + b;
System.out.println(ab == ab2);//!!!!!!!!!!false,因为getBB就是堆中的,即便定义为final他也不是常量
}
private static String getBB() {
return "b";
}
/*--------------------------5-----------------------------*/
private static String ab = "ab";
public static void main(String[] args) {
String s1 = "a";
String s2 = "b";
String s = s1 + s2;
System.out.println(s == ab);//false
System.out.println(s.intern() == ab);//true
}
/*--------------------------6-----------------------------*/
private static String ab = new String("ab");
public static void main(String[] args) {
String s1 = "a";
String s2 = "b";
String s = s1 + s2;
System.out.println(s == ab);//false
System.out.println(s.intern() == ab);//false
System.out.println(s.intern() == ab.intern());//true
}
知识离开了脑子,就只是一堆文字

浙公网安备 33010602011771号