-
(1) 示例
class Test { public static void main(String[] args) { String a1 = "abc"; String a2 = "abc"; if (a1 == a2) { System.out.println("a1 == a2"); } else { System.out.println("a1 != a2"); } String b1 = new String("abc"); String b2 = new String("abc"); if (b1 == b2) { System.out.println("b1 == b2"); } else { System.out.println("b1 != b2"); } } }输出的结果是
a1 == a2 b1 != b2原因:直接用=,相等于只在方法区的运行时常量池中放入一个字符串"abc",且只在没有的时候创建,所以a1和a2的地址相同; 使用new创建,包括两个过程,一是在运行时常量池中创建字符串(如果已经存在就不创建了),而是在Java堆中创建一个指向运行时常量池的指针,因此b1!=b2
堆 运行时常量池 a1 --------------------------------> abc ^ ^ ^ a2 --------------------------------| | | ^ | | b1 -----> new String("abc") ----------| | | b2 -----> new String("abc") ------------| -
数组
(1) 数组被创建时,自动被初始化为"零值"
(2) 多维数组内部可以长度不同
示例
class Test { public static void main(String[] args) { int[][] a = new int[2][]; a[0] = new int[3]; a[1] = new int[6]; } } -
关于String、new String()、string的intern()方法
示例
class StringTest { public static void main(String[] args) { String str1 = "string"; String str2 = new String("string"); String str3 = str2.intern(); System.out.println(str1 == str2); //#1 System.out.println(str1 == str3); //#2 } } class StringTest01 { public static void main(String[] args) { String baseStr = "baseStr"; final String baseFinalStr = "baseStr"; String str1 = "baseStr01"; String str2 = "baseStr" + "01"; String str3 = baseStr + "01"; String str4 = baseFinalStr + "01"; String str5 = new String("baseStr01").intern(); System.out.println(str1 == str2);//#3 System.out.println(str1 == str3);//#4 System.out.println(str1 == str4);//#5 System.out.println(str1 == str5);//#6 } } class InternTest { public static void main(String[] args) { String str2 = new String("str") + new String("01"); str2.intern(); String str1 = "str01"; System.out.println(str1 == str2);//#7 } } class InternTest01 { public static void main(String[] args) { String str1 = "str01"; String str2 = new String("str") + new String("01"); str2.intern(); System.out.println(str1 == str2);//#8 } }
chapter04_Java基础知识_11_字符串和数组
本文深入探讨Java中字符串的比较机制,包括直接赋值与new关键字创建的区别,以及intern()方法的作用。同时,解析数组的自动初始化特性及多维数组的灵活应用,提供丰富的代码示例。

被折叠的 条评论
为什么被折叠?



