黑马程序员技术交流社区

标题: 关于String中的一个小问题 [打印本页]

作者: 纪艺松    时间: 2012-12-27 19:44
标题: 关于String中的一个小问题
public class test{
        public static void main(String[] args){
                Scanner scan = new Scanner(System.in);
                String str = scan.nextLine();
                System.out.println(str);
                System.out.println(str.equals("abc"));........................true;
                System.out.println(str=="abc"));........................false;

                /*String str1[] = str.split(",");
                System.out.println(str1[0]);*/
                System.out.println("abc"=="abc");
        }
       
}


求解答

作者: 郭俊    时间: 2012-12-27 22:11
    同学你的疑惑是什么?  是哪不懂啊?
作者: 冯伟超    时间: 2012-12-27 22:43
你通过Scanner来在键盘上获取子字符串,然后赋给str,这时str就是相当于new了一个实例。
还有equals在String中它覆写了Object中的equals,覆写后实现的功能是值的比较。
所以第一个是true。第二个str==“abc”中前面是一个对象,在内存中对应的地址值和abc对应的地址值
值不相同!
作者: 梁俊    时间: 2012-12-29 15:35
本帖最后由 梁俊 于 2013-1-2 21:09 编辑

equals是值的比较,==是对象的比较,或者说是地址的比较,str和"abc"在内存中地址不一样,不是一个对象
System.out.println("abc"=="abc");//结果为true
abc都在常量池里面,当又创建一个字符串常量"abc"时,先在常量池里面找有没有这个常量,没有会重新创建一个字符串对象,有的话就不创建了,进行引用这个地址,所有结果为ture

作者: 勾尧    时间: 2012-12-31 20:31
==比较引用对象的地址值, equals比较字符串的值




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