当前位置: 代码迷 >> J2SE >> new String() 创办的 字符串 是在哪儿啊
  详细解决方案

new String() 创办的 字符串 是在哪儿啊

热度:658   发布时间:2016-04-23 21:34:44.0
new String() 创建的 字符串 是在哪儿啊?
String a = new String("123");
第一种说法是:用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。

第二种说法是:指向常量池(constant pool)里"123"。

哪个是正确的,求解答啊。
java

------解决方案--------------------
第一种。。。
很简单做个比较就行了
String s1="123";
String s2="123";
String s3=new String("123");
System.out.pritnln(s1==s2)://true
System.out.pritnln(s3==s2)://false
至于具体原理,详见。
http://blog.csdn.net/java2000_net/article/details/3681385


------解决方案--------------------
可以用equels 比较量是否一样
------解决方案--------------------
举个例子吧
String s1="adcdf";
String s1=new String("abcdf");
这个两者是有很大的不同,前者是java很特殊的对象获取的方式;通常是被放在常量池中,当被创建这个"adcdf"
对象时就被保存在常量池中了,当下次有其它变量的对象都是"adcdf"都可以用,而new创建的时候被放在堆
------解决方案--------------------
反正你new了,那就是新建
------解决方案--------------------
这个前几天刚好看了下,解释如下:

//这个是创建在字符串缓冲池中的,供其他引用使用,地址相同。
String str = "abc";
String str1 = "abc"+"de";//等同于str1 = "abcde",也是创建在缓冲池中的。

//如下则是创建在缓冲池外,但是同时也会在缓冲池内创建相同对象供其他引用使用。
String str2 = new String("abcdef");//这句话创建了两个对象,一个是缓冲池外的堆内存中,同时在缓冲
                                   //池内也创建了相同对象。str2此时指向的是堆内存中的对象。

//总结:new出来的字符串肯定是在缓冲池外的也就是在堆内存中,地址各不相同,缓冲池内的对象则具备唯
// 一性,引用变量指向的都是同一个对象。

  相关解决方案