A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© igi9009 中级黑马   /  2014-4-17 16:07  /  1264 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s = "abc"和String value = new String ("abc");这两种方法建立的字符串有什么区别?内容都一样为什么用==比较的结果是false?原理是什么?

2 个回复

正序浏览
本帖最后由 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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
String s = "abc"
这个是先找java内存字符串池子里有木有abc,如果有就把这个字符串地址值给s,如果没有就新建一个abc字符串再这么做。
String value = new String ("abc")
这个是直接先新建一个abc字符串在内存中,然后再把这个字符串内存地址赋给value。
而==号是比较的对象在内存中的地址值。也就是说内存里有两个abc字符串时候,这俩不相等。
如果你想比较内容,用equals方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马