关于equals和object的问题 ?求教高手!
public static void main(String[] args){
String s1=new String("hello");
String s2=new String("hello");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
为什么上面的输出结果都为false;如果想输出正确,怎么做?我不是很懂啊
下面这个代码怎么错误class Student{
String name;
int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public boolean equals(Object obj, Object Student){
if(obj instanceof Student)
Student s=(Student)obj;//if(this.name.equals(obj.name)&&this.age==obj)
if(this.name.equals(s.name)&&this.age.equals(s.age))
return true;
}
return false;
}
[解决办法]
第一个问题,s1==s2肯定是false,你再运行好好看看,第二个是true
s1==s2比较的是两个引用所指向的是否是同一个对象;
equals刚是比较两个对象的内容是否相同。
第二个问题,if(obj instanceof Student) 这里instanceof后面应该跟类名,判断obj是否是此类的一个实例,而你在这用了Student,是个对象,虽然你类名也叫Student,但在方法里被隐藏了。
[解决办法]
public boolean equals(Object obj, Object Student){
==》
public boolean equals(Object obj){
equals 方法只需要1个参数
public boolean equals(Object obj) { if (obj instanceof Test) { Test s = (Test) obj;// if(this.name.equals(obj.name)&&this.age==obj) if (this.name.equals(s.name) && this.age == s.age) return true; } return false; }
[解决办法]
(s1==s2)s1和s2是字符串对象,所以==不但要比较字符串内容还要比较引用也就是两个字符串的地址是否相同,
所以是false
(s1.equals(s2));比较的是两个字符串对象的值,所以是true
正确的类定义:
class Student{
String name;
int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public boolean equals(Object obj, Object Student){
if(obj instanceof Student){//你的这里少了个“}”
Student s=(Student)obj;
if(this.name.equals(s.name)&&this.age==s.age)//age是原始类型,没有equals方法
return true;
}
return false;
}
}//你的在这里也少了个“}”
[解决办法]
关于equals:
package suntest;/* * 如果两个对象用对象的equals()方法比较是相等的, * 那么它们调用hashCode()方法必须生成同样的整数值。 * 例如下面的代码 * */public class HashCodeTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String s1 = new String("Hello"); String s2 = new String("Hello"); System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); Integer i1 = new Integer(10); Integer i2 = new Integer(10); System.out.println(i1.hashCode()); System.out.println(i2.hashCode()); }}
[解决办法]