黑马程序员技术交流社区

标题: 不同的方法建立想通内容的字符串 [打印本页]

作者: 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引用。我们知道,对两个引用变量,使用==判断它们的值(引用)是否相等,即指向同一个对象:
  1. public class Test
  2. {
  3.         public static void main(String [] args)
  4.                 {
  5.                         String s1 = "abcd";
  6.                         String s2 = "abcd";
  7.                     String s3 = new String("abcd");
  8.                     String s4 = new String("abcd");
  9.                         System.out.println(s1==s2);
  10.                         System.out.println(s1==s3);
  11.                         System.out.println(s3==s4);
  12.                 }
  13. }
复制代码

结果为
true
false
false




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2