String不属于java中8大基本类型,但创建一个字符串对象时有一些值得注意的问题。
常量池的概念:
常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。例如:
String str1 = "abc";
String str2 = "abc";
String str2 = "ab" + "c";
则:
System.out.println( str1==str2 );
System.out.println( str1==str3 );
输出的都是true,
以这种方式创建的字符串由于利用了常量池确保只有一个拷贝。
String str1 = new String("abc");
回到楼主的问题:
{"abc","cde"};
String str2 = new String("abc");
System.out.println( s0==s1 );输出为false!!
以这种方式创建的字符串不放入常量池,它们有自己的空间。
回到问题:
一、String str1 = new String[]{"abc","123","wff"} ;
二、String str2 = {"abc","123","wff"} ;
第二种创建的字符冲数组是放在常量池空间中的!!第一种有自己的存放空间。
我们发现System.out.println( str1[0]==str2[0] );输出为false.
假如是这样:
一、String[] str1 = {"abc","123","wff"} ;
二、String []str2 = {"abc","123","wff"} ;
System.out.println( str1[0]==str2[0] );输出为false!!! |