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

光军丶 2013-10-27 10:38:51
String a = new String("123");
第一种说法是:用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。

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

哪个是正确的,求解答啊。
...全文
519 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruanjianniuren 2013-10-28
  • 打赏
  • 举报
回复
举个例子吧 String s1="adcdf"; String s1=new String("abcdf"); 这个两者是有很大的不同,前者是java很特殊的对象获取的方式;通常是被放在常量池中,当被创建这个"adcdf" 对象时就被保存在常量池中了,当下次有其它变量的对象都是"adcdf"都可以用,而new创建的时候被放在堆
编程点滴 2013-10-28
  • 打赏
  • 举报
回复
反正你new了,那就是新建
解忧杂货铺 2013-10-28
  • 打赏
  • 举报
回复
这个前几天刚好看了下,解释如下:

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

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

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

Landa_Aiden 2013-10-27
  • 打赏
  • 举报
回复
可以用equels 比较量是否一样
失落夏天 2013-10-27
  • 打赏
  • 举报
回复
第一种。。。 很简单做个比较就行了 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

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧