==和equals() 类型不兼容的两个对象可以使用equals(),但是返回值一定是false。相同类型对象值不同也会返回false类型不兼容的两个对象不能使用==,编译会出错 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 某些情况覆写equals,equals比较的是值,而 == 比较的是引用(内存分配的地址)。 ==指两个对象相等,EQUALS("")是字副串相等 前面大家回答我不明白b1.equals(b2) 比较的是内存的地址那为什么c1.equals(c2) 比较的是值呢?b1返回的是内存地址,c1返回的却是数值3,这是为什么? Object的equals方法:如下 ,比较的是地址 public boolean equals(Object obj) { return (this == obj); }Integer 的equals方法 :如下:比较的是value public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }Object的toString方法: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }Integer 的toString方法: public String toString() { return String.valueOf(value); } ==比较的是两个对象的地址,而equals比较的是两个对象的值,equals返回值是boolean的就如同:System.out.println(c1==c2); //返回false,因为cl与c2的地址不同 System.out.println(c1.equals(c2));//返回true;,因为c1值(3)与c2的值(3)相同,所以equals的返回值是true equals()到底比较的是什么,要看这个类得equals()方法是怎样写的,就像上面的兄弟说的样:Object中equals就是比较两个object是否==,而其他一些类可能会重载equals方法,例如Integer中,他是判断Integer对象中的整数值是否相等,所以equals到底比较什么不能想当然,要看看这个类的说明文档或具体实现。==一定是判断两个对象指向的内存空间是否相同,即是否是同一个对象 对于基本类型的比较,用==就可以达到你需要的目的,对于类类型,我想你多数情况下需要使用equals()方法去比较。对于你自己写的类,你还要自己写一个相应的equals方法,否则无法进行比较。 上面说的是对于java中的类,而对于原始类型int char等,==就是判断值是否相等的,对于他们没有equals方法的。 简单的说:1、==是比较的reference,也就是所谓的指针啊,句柄之类的。2、equals比较的是实质的内容,也就是真正对象的内容。3、equals基本上都是被重载了的,如果不重载的话,效果和==是一样的。(可喜的是,SUN在在大部分class里面都把equals都重载了,我们就不需要再自己动手了) 在java中基本上所有的数据都是对象,当然还有几个不是对象。equals是object中的方法,而且java中所有的类都是从object继承而来的,有很多类都重载了这个方法,所以这个方法说成是比较内容要好一些。 都被讲完了我来分析一下A a1=new A();A a2=new A();A b1=new A(2);A b2=new A(2);Integer c1=new Integer(3);Integer c2=new Integer(3);System.out.println(a1==a2); //返回false //这里是用new虽然没有赋值但是有内存空间System.out.println(a1.equals(a2));//返回false 没有比较的对象 把A换成String就能看出了System.out.println(b1==b2);//返回falseSystem.out.println(b1.equals(b2));//返回false 这里和上面一样 你的A是什么System.out.println(b1);//返回内存地址System.out.println(c1==c2);//返回falseSystem.out.println(c1.equals(c2));//返回true; equal用于字符串 System.out.println(c1); //返回数值3 ; 不是A不是String 小弟求助java泛型题目 关于sun.net.ftp.FtpClient;的用法 java 读写execl 关于extjs 栏目结构类型的迭代如何做,请高人教我! 新手提问, 讨厌的volatile 如何把一个十六进制的字符串,转换成简体字 求教啊,java编程思想这本书从哪些章节入手比较好呢? jb8的error:java/lang/Object.class not found是什么错误? applet的迷惑 String对象作为参数传递给函数的问题
那为什么
c1.equals(c2) 比较的是值呢?
b1返回的是内存地址,c1返回的却是数值3,这是为什么?
public boolean equals(Object obj) {
return (this == obj);
}
Integer 的equals方法 :如下:比较的是value
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
Object的toString方法:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Integer 的toString方法:
public String toString() {
return String.valueOf(value);
}
就如同:System.out.println(c1==c2); //返回false,因为cl与c2的地址不同
System.out.println(c1.equals(c2));//返回true;,因为c1值(3)与c2的值(3)相同,所以equals的返回值是true
Object中equals就是比较两个object是否==,
而其他一些类可能会重载equals方法,例如Integer中,他是判断Integer对象中的整数值是否相等,所以equals到底比较什么不能想当然,要看看这个类的说明文档或具体实现。
==一定是判断两个对象指向的内存空间是否相同,即是否是同一个对象
1、==是比较的reference,也就是所谓的指针啊,句柄之类的。
2、equals比较的是实质的内容,也就是真正对象的内容。
3、equals基本上都是被重载了的,如果不重载的话,效果和==是一样的。(可喜的是,SUN在在大部分class里面都把equals都重载了,我们就不需要再自己动手了)
equals是object中的方法,而且java中所有的类都是从object继承而来的,有很多类都重载了这个方法,所以这个方法说成是比较内容要好一些。
我来分析一下A a1=new A();
A a2=new A();
A b1=new A(2);
A b2=new A(2);
Integer c1=new Integer(3);
Integer c2=new Integer(3);
System.out.println(a1==a2); //返回false //这里是用new虽然没有赋值但是有内存空间
System.out.println(a1.equals(a2));//返回false 没有比较的对象 把A换成String就能看出了
System.out.println(b1==b2);//返回false
System.out.println(b1.equals(b2));//返回false 这里和上面一样 你的A是什么
System.out.println(b1);//返回内存地址
System.out.println(c1==c2);//返回false
System.out.println(c1.equals(c2));//返回true; equal用于字符串
System.out.println(c1); //返回数值3 ; 不是A不是String