日期:2014-05-20  浏览次数:20845 次

java 比较字符串
		String i = "Hello World";
String j = "Hello World";

if(i==j)
{
System.out.println("i == j");
}
else
{
System.out.println("i != j");
}




这个程序为什么执行结果是i==j?? 不是说“==”是比较引用,equals才是比较内容吗?

------解决方案--------------------
这个是老问题啦,你要想达到输出“i != j",得new 一个。
String i =new string( "Hello World"); 
String j = new String("Hello World"); 

------解决方案--------------------
参见《Effective java》第四条  这样的对象会被重用;
如果 String i = new String("Hello World");
就不等了
------解决方案--------------------
这里就涉及到字符串在内存中的存储结构了,通常我们用new创对象时,每new一次都会在堆中开辟一个内存空间用来存放该对象,该对象的应用则在栈中存放着,字符串的创建方式常见的有两种,一种是直接赋值,一种是new关键字创建,前者会现在字符串常量池中查找有没有该字符串,如果有就直接返回,如果没有会创建一个字符串并存放在常量池中;后者就会首先在堆中开辟一段内存空间,然后根据new出对象的字符串内容到字符串常量池中去查找。
谢谢楼主的提问!
------解决方案--------------------
不是new出来的是放在常量池中的,这样的i,j其实是同一个引用,他们对应常量池中的Hello World,所以i==j