黑马程序员技术交流社区
标题:
关于== 与equals 不明白。
[打印本页]
作者:
王小五
时间:
2012-11-24 09:19
标题:
关于== 与equals 不明白。
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应该堆内存中,他们怎么又相等呢?
作者:
李有
时间:
2012-11-24 09:24
1 相等性的比较 (== )
a 对于原生数据类型来说,比较的是左右两边的值是否相等。
b 对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。
2 equals()方法,该方法定义在Object 类当中,因此Java 中的每个类都具有该方法,对于Object 类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于 Object 类的equals()方法来说,它等价于==。
3 对于 String 类的 equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。 对于String 对象的相等性判断来说,请使用equals()方法,而不要使用== 。
作者:
冰深
时间:
2012-11-24 09:41
java中equals和和和和==的区别
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。 ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。 equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。 ==比较的是2个对象的地址,而equals比较的是2个对象的内容。 显然,当equals为true时,==不一定为true。
作者:
张权
时间:
2012-11-24 11:05
本帖最后由 张权 于 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有可能比较的是地址值,而不是对象中的内容。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2