2 java
我有一个Java类
class Student
{
String name;
int age;
}
Run Code Online (Sandbox Code Playgroud)
另外,我有学生类的两个实例student1和student2.
找出两个实例是否代表"同一学生"的一种方法是手动比较数据,即名称和年龄.如果它们是相同的,那么它们代表"同一个学生".
有没有其他方法可以找出这两个实例是否代表"同一个学生"?
PS我在接受采访时被问到这个问题.我仍然不完全理解"同一个学生"这个短语.我猜它在现实世界中意味着同一个学生.如果没有,面试官还有什么意思呢?
什么标识学生?
除了名字和年龄,我们什么都没有.现在,你可能有两个同名的人,但可能没有.无论如何,我不认为年龄是识别某人的东西 - 不像名字那样.
所以我会这样做
public boolean equals(Object o) {
if(!o instanceof Student) return false;
Student s = (Student)o;
return o.name.equals(this.name);
}
Run Code Online (Sandbox Code Playgroud)
如果您是Java新手,Object类有一个方法public boolean equals(Object o).因为Java中的每个对象都继承自Object,所以无论是否需要,它们都拥有该方法.默认实现只是比较内存中的地址.所以如果你这样做的话
Student s = new Student();
Student t = new Student();
boolean e = (s == t); // always false
boolean q = s.equals(t); // always false if not overridden
Run Code Online (Sandbox Code Playgroud)
现在,我编写的这个特殊方法不执行空检查,如果它在生产代码中,您可以执行此操作.
Java中同一学生有两种定义(如果学生是一个对象).存在这样的情况:学生具有相同的名称和年龄,可以通过实现.equals()方法来检查.这意味着它们的价值是相等的.
@Override
public boolean equals(Object o) {
//check if the student's age and name are equal
}
Run Code Online (Sandbox Code Playgroud)
第二种情况是指当两个不同的变量指向同一个实际对象时,这称为引用相等,可以使用==进行测试.
if (student1 == student2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10242 次 |
| 最近记录: |