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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小五 中级黑马   /  2012-11-24 09:19  /  1241 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  String a="asd";
                System.out.println(a.equals("asd"));
                System.out.println(a=="asd");
                String b=new String("asd");
                System.out.println(b.equals("asd"));
                System.out.println(b=="asd");
                String c=“asd”;
                System.out.println(b.equals(c));
                System.out.println(b==c);
    运行结果是
true
true
true
false
true
false
  在书上对于==的解释:如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同)只要两个变量的值相等,就将返回true  那为什么b=="asd"返回的是false呢?
而按道理 a应该是保存在常量池中,b应该堆内存中,他们怎么又相等呢?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
1 相等性的比较 (== )
a  对于原生数据类型来说,比较的是左右两边的值是否相等。
b  对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。
2  equals()方法,该方法定义在Object 类当中,因此Java  中的每个类都具有该方法,对于Object 类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于 Object 类的equals()方法来说,它等价于==。
3  对于 String  类的 equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。 对于String 对象的相等性判断来说,请使用equals()方法,而不要使用== 。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
java中equals和和和和==的区别
       值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。 ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。 equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。  ==比较的是2个对象的地址,而equals比较的是2个对象的内容。 显然,当equals为true时,==不一定为true。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
本帖最后由 张权 于 2012-11-24 12:08 编辑

貌似这个问题我以前问过的吧,哈哈!刚开始看到发现又忘记了,这该死的记性,不过想了下又想起来了!
首先你要知道java 中 的数据类型,引用型数据类型和基本数据类型。
==在基本数据类型中,就是对两个基本类型数据的值进行比较,例如 int i=0;int b=0;  判断a==b,结果为true;
然后就是== 在引用数据类型中的比较了:
在引用数据类型与引用数据类型比较、引用数据与基本数据类型比较中,==比较的是对象的地址值,equals比较的是对象地址中的内容。
  首先,你要明白这句话String b = new String("asd")中的b,这个b是一个类类型变量(或叫做引用),它只是引用了对象的地址值,所以b的值并不等于asd,你可以用System.out.println(b);这句话来验证,结果打印出来的是一个地址值,而不是asd.  所以 System.out.println(b=="asd");为false.
而用equals比较的是对象中的内容,又因为对象中的内容是"asd",所以  b.equals("asd")为true。


另外请你看下我问的== 与equals的区别这个问题,其中讲到了equals的另一特点,就是equals有可能比较的是地址值,而不是对象中的内容。


评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

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