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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 纪艺松 中级黑马   /  2012-12-27 19:44  /  2197 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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");
        }
       
}


求解答

4 个回复

正序浏览
==比较引用对象的地址值, equals比较字符串的值
回复 使用道具 举报
梁俊 黑马帝 2012-12-29 15:35:28
板凳
本帖最后由 梁俊 于 2013-1-2 21:09 编辑

equals是值的比较,==是对象的比较,或者说是地址的比较,str和"abc"在内存中地址不一样,不是一个对象
System.out.println("abc"=="abc");//结果为true
abc都在常量池里面,当又创建一个字符串常量"abc"时,先在常量池里面找有没有这个常量,没有会重新创建一个字符串对象,有的话就不创建了,进行引用这个地址,所有结果为ture
回复 使用道具 举报
你通过Scanner来在键盘上获取子字符串,然后赋给str,这时str就是相当于new了一个实例。
还有equals在String中它覆写了Object中的equals,覆写后实现的功能是值的比较。
所以第一个是true。第二个str==“abc”中前面是一个对象,在内存中对应的地址值和abc对应的地址值
值不相同!
回复 使用道具 举报
    同学你的疑惑是什么?  是哪不懂啊?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马