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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© adamjy 中级黑马   /  2014-4-5 15:42  /  893 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Person {
  2.     public static void main(String[] args)
  3.     {
  4.         String s = "hello,world";
  5.         String s1 = "hello,";
  6.         String s2 = "world";
  7.         System.out.println(s == s1 +s2);
  8.         System.out.println(s =="hello,"+"world" );   
  9.     }
  10. }
复制代码


为什么输出是
false
true

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
字符串比较的是地址,如果想要比较里面的内容的话这样:s.equals(s1+s2)
回复 使用道具 举报
因为 == 是比较内存地址的引用,所以第一肯定是false,第二个true,是因为字符串常量池中存在"hello,world",s =="hello,"+"world"  这里直接引用了常量池的"hello,world",所以为true
回复 使用道具 举报
public class Person {
    public static void main(String[] args)
    {
        String s = "hello,world";  //这里的s是一个对象
        String s1 = "hello,";      //这里的s1也是一个对象
        String s2 = "world";       //这里s2也是对象
        System.out.println(s == s1 +s2);//  s == s1 +s2 这个是判断s对象的地址值是否等于s1对象和s2对象的地址之和,肯定不等的
        System.out.println(s =="hello,"+"world" ); //因为String重写了object的equals方法,s的字母组成和字符串"hello,world"相同所以这里比较时会相等。
    }
}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
http://bbs.itheima.com/thread-112461-1-1.html

这个链接里有详细说明
回复 使用道具 举报
public class Person {
    public static void main(String[] args)
    {
        String s = "hello,world";//在内存堆栈中创建一个String类型的对象“hello world”
        String s1 = "hello,";//在内存堆栈中创建另一个String类型的对象“Hello”
        String s2 = "world";//在内存在创建一个String对象“world”
        System.out.println(s == s1 +s2);//判断s1+s2的地址值是否和s相等,显然是false
        System.out.println(s =="hello,"+"world" );   //由于Sring在内存堆栈中有一个String池,故==右边的对象同样也是第一次创建的“hello world”,所以返回true
    }
}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马