黑马程序员技术交流社区
标题:
不同的方法建立想通内容的字符串
[打印本页]
作者:
igi9009
时间:
2014-4-17 16:07
标题:
不同的方法建立想通内容的字符串
String s = "abc"和String value = new String ("abc");这两种方法建立的字符串有什么区别?内容都一样为什么用==比较的结果是false?原理是什么?
作者:
kuroro自走核炮
时间:
2014-4-17 16:14
String s = "abc"
这个是先找java内存字符串池子里有木有abc,如果有就把这个字符串地址值给s,如果没有就新建一个abc字符串再这么做。
String value = new String ("abc")
这个是直接先新建一个abc字符串在内存中,然后再把这个字符串内存地址赋给value。
而==号是比较的对象在内存中的地址值。也就是说内存里有两个abc字符串时候,这俩不相等。
如果你想比较内容,用equals方法。
作者:
z1342802487
时间:
2014-4-17 16:51
本帖最后由 z1342802487 于 2014-4-17 16:52 编辑
java运行环境有一个字符串池。比如String str="abcd"时,会首先查看字符串池中是否存在字符串"abcd",如果存在则直接将"abcd"赋给str,如果不存在则会先在字符串池中新建一个字符串"abcd",然后再将其赋给str。而执行String str=new String("abcd")时,不管字符串池中有没有"abcd"都会在堆中新建一个字符串对象然后将其赋给str引用。我们知道,对两个引用变量,使用==判断它们的值(引用)是否相等,即指向同一个对象:
public class Test
{
public static void main(String [] args)
{
String s1 = "abcd";
String s2 = "abcd";
String s3 = new String("abcd");
String s4 = new String("abcd");
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s3==s4);
}
}
复制代码
结果为
true
false
false
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2