当前位置: 代码迷 >> Java相关 >> [讨论] 一道String的问题
  详细解决方案

[讨论] 一道String的问题

热度:105   发布时间:2007-02-14 16:35:20.0
[讨论] 一道String的问题
public class StringTest
{

public static void main(String[] args)
{
String str1 = "hello";
String str2 = "hel";
str2 = str2 + "lo";
System.out.println("str1 == str2 :" + (str1 == str2));
}
}

//为什么会打出false呀?

[此贴子已经被作者于2007-2-14 16:43:43编辑过]

搜索更多相关的解决方案: String  

----------------解决方案--------------------------------------------------------
字符串比较用equals
----------------解决方案--------------------------------------------------------

每一本书..都有讲到比较字符串的方法..在网上也一大堆...竟然还有人在问..

----------------解决方案--------------------------------------------------------

也可以用String类的CompareTo(String s)方法


----------------解决方案--------------------------------------------------------


哎...如果声明一个字符串,那么这个字符串指象的对象是不是应该在字符串常量池中?

如String str1 = "hello";
那么字符串str2 后来也等于"hello"呀,按说应该和str1指向相同的引用,为什么str1==str2会返回false?

此段程序在c#中是返回的true;很奇怪,所以来问问.....


请有真知水平的朋友来回答问题...如果你看不起这个问题,你可以不泄,但请你也闭嘴!


----------------解决方案--------------------------------------------------------
str1是在内存池没错,但str2不是~
你用个反编译工具反编译一下class文件就会发现
str2 =str1+"lo";
实际上是:
str2 = (new StringBuilder()).append(str2).append("lo").toString();
显然,str2是new出来滴(不信去看看StringBuilder的源代码),so...

----------------解决方案--------------------------------------------------------
new出来不也一样在内存中么
----------------解决方案--------------------------------------------------------
以下是引用Eastsun在2007-2-14 23:13:09的发言:
str1是在内存池没错,但str2不是~
你用个反编译工具反编译一下class文件就会发现
str2 =str1+"lo";
实际上是:
str2 = (new StringBuilder()).append(str2).append("lo").toString();
显然,str2是new出来滴(不信去看看StringBuilder的源代码),so...

谢谢!我去查看下..但按说str2怎么会new一下呀..太郁闷了.......
你有没有什么好的反编译工具?


----------------解决方案--------------------------------------------------------
回楼上上:new出来的是在内存里面,事实上是在里面;而通过String str ="xxxx";得到的是在常量内存池里面.
任意两个new出来的String都不会指向同一个内存地址;而对同一个字符串,常量内存池里面最多只有一个备份.

[此贴子已经被作者于2007-2-15 1:31:44编辑过]


----------------解决方案--------------------------------------------------------
我的意思就是

“str1是在常量内存池没错,但str2不是~而是在堆内存”

----------------解决方案--------------------------------------------------------
  相关解决方案