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