java equals,为什么这里输出的是不同,不是相同???怎样让它输出相同????

源代码1:publicclassStudent{publicStringname;publicintage;publicintnumber;publicStudent()... 源代码1:
public class Student{
public String name;
public int age;
public int number;
public Student(){
System.out.println("无参构造函数");
}
public Student(String n,int a,int num){
this.name=n;
this.age=a;
this.number=num;
}
}
源代码2
public class Sample4_20{
public static void main(String []args){
Student s1=new Student("张三",13,111111);
Student s2=new Student("张三",13,111111);
if(s1.equals(s2)){
System.out.println("两个变量相同!!!");
}else
System.out.println("两个变量不同!!!");
}
}
展开
 我来答
萢萢i3
2015-05-06 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.7万
采纳率:71%
帮助的人:4723万
展开全部

需要重写一下equals方法。

修改后的代码如下:

class Student {
    public String name;
    public int age;
    public int number;
    public Student() {
        System.out.println("无参构造函数");
    }
    public Student(String n, int a, int num) {
        this.name=n;
        this.age=a;
        this.number=num;
    }

    public Boolean equals(Student o) {    //重写一下equals方法
        if (this == o) {
            return true;
        } else if ((this instanceof Student) && (o instanceof Student)
                    && this.name.equals(o.name) && (this.age == o.age)
                   && (this.number == o.number)) {
            return true;
        } else {
            return false;
        }
    }
}
public class Demo {
    public static void main(String []args) {
        Student s1=new Student("张三", 13, 111111);
        Student s2=new Student("张三", 13, 111111);
        if(s1.equals(s2)) {
            System.out.println("两个变量相同!!!");
        } else
            System.out.println("两个变量不同!!!");
    }
}
追问
不好意思。另一个人比你快一点写出来了,不过不明白equals未重写的时候比较的究竟是什么?
追答
equals未重写的时候跟 == 一样。
白菜一颗
2015-05-06 · TA获得超过8916个赞
知道大有可为答主
回答量:3260
采纳率:69%
帮助的人:3754万
展开全部

你main方法里面改成下面这样, equals 就成立了

Student s1=new Student("张三",13,111111);
Student s2=s1;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陨落天空ok
推荐于2016-03-12 · TA获得超过197个赞
知道小有建树答主
回答量:233
采纳率:71%
帮助的人:109万
展开全部

你要在你的Sturdent类中覆盖equals方法

public Boolean equals(Test test2){
Boolean re = false;
if (this.name.equals(test2.name) && this.age == test2.age && this.number == test2.number){
re = true;
}
return re;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-05-06
展开全部
equals是判断字符串的,你这是个实例化对象,了。
更多追问追答
追问
那为什么不同咯???两个对象不都一样????
追答
你这样写会报错的,不能比较
可以这样s1.name.equals(s2.name)
s1.age==s2.age
s1.number==s2.number
或者重写equals覆盖java里的。不过那太麻烦了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
生活he家
2015-05-06 · 一个属于大家的搬运工
生活he家
采纳数:1536 获赞数:6828

向TA提问 私信TA
展开全部
你这个是需要重写equals方法的
更多追问追答
追问
怎么重写??我这样写为什么不能得到“相同”的输出结果??
追答
因为你的两个Student,不是同一个对象,虽然他们的成员变量一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式