黑马程序员技术交流社区

标题: String比较问题 [打印本页]

作者: adamjy    时间: 2014-4-5 15:42
标题: String比较问题
  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
作者: yanzhendong    时间: 2014-4-5 15:51
字符串比较的是地址,如果想要比较里面的内容的话这样:s.equals(s1+s2)
作者: 一年_Hei    时间: 2014-4-5 15:56
因为 == 是比较内存地址的引用,所以第一肯定是false,第二个true,是因为字符串常量池中存在"hello,world",s =="hello,"+"world"  这里直接引用了常量池的"hello,world",所以为true
作者: 郭黎明    时间: 2014-4-5 16:08
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"相同所以这里比较时会相等。
    }
}
作者: 请备注    时间: 2014-4-5 16:56
http://bbs.itheima.com/thread-112461-1-1.html

这个链接里有详细说明
作者: 陈振宇    时间: 2014-4-6 06:47
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
    }
}




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