a = b;
a 和 b这两个reference指向了同一对象,所以返回true c.i = d.i = 100;
System.out.println(c.equals(d));
这两个对象的i值相同,但还是两个对象
要返回true你要自己重写它们的equals方法
a 和 b这两个reference指向了同一对象,所以返回true c.i = d.i = 100;
System.out.println(c.equals(d));
这两个对象的i值相同,但还是两个对象
要返回true你要自己重写它们的equals方法
解决方案 »
- java 的多数据输入
- java项目下载文件功能,用ie第一次下载txt文件,文件名会被修改急急急!
- 【如何使用Struts1实现批量更新?】
- struts2 的问题(tomcat启动报错),太搞人了
- 通过jquery执行ajax提交到struts2的action上不执行相应的validation文件
- 使用Hibernate在JSP中读取数据库,导致Tomcat内存占用越来越高
- 编码问题,请教相关高手!!
- 请问,isleaf(),叶子节点是什么意思?
- spring mvc 验证后返回页面的问题
- 关于spring注解注入的几个问题
- 关于在hibernate中更新数据的问题。
- 有没有办法看到源代码(用FRAME组成的页面)
谢谢你的回复,我认为我们两人对==的理解是不同的,从你的回复中,我认为你对==的理解是如果两个reference指的是同一对象,即返回为true,反之为false;
我又仔细把 think in java中关于==中的阅读了一遍,它的原话是这样的:
"因为两个对象的内容是不同的,不过虽然内容相同,但其reference却不同,由于==和!=运算符所比较的是object reference,所以....."
我从这里的理解就是==是比较两个对象的reference。但是搜索以前的帖子观点和你类同。
是不是一个reference就只对应一个对象,一个对象在就只能由一个reference与其对应。是这样么?
String b = "abc";a == b //输出为trueString a = new String("abc");
String b = new String("abc");
a == b //输出为false;这两个有什么区别呢?
"a".equal("a")为true
"a"=="a"为false,不过jbulider中把“=”认为是equal(),所以你若
if("a"=="a"){
//code
}
你用debug跟踪到"a"=="a",再按F6显示"a"=="a"为false,但在jbuilder中还是会执行到if里面
而equals比较的是两个对象的内容是否相同,当然如果是你设计的类的equals方法,则需要你自已实现。
由于在java中除了基础类型(int,char,boolean等)其它都是对象,而用"=="来比较对象实际上就是在比较对象的句柄(也可以说是地址的比较),因此即使对象的内容是一样的用"=="判断也是不一样的
(除非:Object a =new Object()
Ojbect b = a;
if(a==b)
System.out.println("true");
在上述这个程序的情况下执行结果是打印出“true”)。
而equals()方法在Java中所有的对象都具有的,由于Java中的所有类都extends Object,所以个各类都可能对equals()方法重写(面向对象多态性的体现),因此equals()方法虽说也是比较两个对象,但由于各个类中的实现方法不一样,从而其比较的内容也不一样,就像楼上说的String 对象的equals()是用来比较字符串对象所包含的字符串值是否相等。
结论:==的用法比较单一,是一个固有的操作符
equals()方法是一个可以根据需要来比较两个对象的某些特征是否相等,用途很广
equals()就是对象值比较,而==是比较两个对象是否为同一个即指向同一个内容!
然而值一样并不意味着对象是同一个对吧!
对于楼上举的例子:
String a=new String("aa");
String b=new String("aa");
是两个对象,‘==’的非
而equals的true
是因为a和b值一样,‘而对象不一样!
而另个例子:
Object a =new Object()
Ojbect b = a;
if(a==b)
System.out.println("true");
这是因为在java中对象都是引用型变量,即对象变量实质是地址指针,他俩附值后指向同一个对象内存,所以是相等的!public class Test
{
public static void main(String[] args){
String[] flav1 = {
"Chocolate", "Strawberry",
"Vanilla Fudge Swirl", "Mint Chip",
"Mocha Almond Fudge", "Rum Raisin",
"Praline Cream", "Mud Pie"
};
String[] flav2 = {
"Chocolate", "Strawberry",
"Vanilla Fudge Swirl", "Mint Chip",
"Mocha Almond Fudge", "Rum Raisin",
"Praline Cream", "Mud Pie"
};
if(flav1.equals(flav2))
System.out.println("flav1 equals flav2 !");
else
System.out.println("flav1 doesn't equals flav2 !");
}
};
为什么结果是:
flav1 doesn't equals flav2 很简单,数组对象是从Object对象继承下来的。当中即继承了equals()方法。而该equals()等同于==
==永远比较对象(说白了就是内存地址),如果是primitive类型的话就是比值,因为primitive没有地址的概念,而如果是wrapper类型的话就是比内存地址了
而equal要分是String还是StringBuffer,如果是String的equal的话就是比对象中的值,而StringBuffer的话就是比地址