为什么用get方法得到的相同的值判断==是false
时间: 2024-03-18 12:43:03 浏览: 12
在Java中,使用`==`比较两个对象时,比较的是它们的引用是否相等,也就是它们是否指向同一个内存地址。而使用`get`方法得到的相同的值,虽然它们的值相等,但是它们所指向的内存地址是不同的,因为它们是两个不同的对象。
举个例子,如果有一个Person类,其中有一个String类型的name属性,并且有对应的getter方法`getName()`。现在有两个Person对象,它们的name属性都是"张三",但是它们是两个不同的对象。当我们使用`p1.getName() == p2.getName()`进行比较时,因为`getName()`方法返回的是两个不同的String对象,它们的引用是不同的,所以比较结果是false。
如果要比较两个String类型的值是否相等,应该使用`equals()`方法进行比较,例如`p1.getName().equals(p2.getName())`。
相关问题
为什么用get方法得到的相同的值判断==是false,但是在set时赋值以2L时get判断==为true
这个问题的答案跟具体的代码实现有关系,但是一般情况下,如果在set方法中给属性赋值的是基本数据类型,那么每次调用set方法时,都会创建一个新的包装类对象来存储这个基本数据类型的值,所以在使用get方法获取属性值时,每次返回的都是一个新的对象。因此,如果在set方法中给属性赋值为2L,那么每次使用get方法获取属性值时,都会返回同一个值为2L的Long类型对象,因为Long类型是不可变对象,它的值一旦被创建,就不能改变。
因此,如果在使用get方法获取属性值时,得到的是同一个对象,那么使用`==`比较两个对象时,结果就会为true。而如果在使用get方法获取属性值时,得到的是不同的对象,那么使用`==`比较两个对象时,结果就会为false,因为它们的引用是不同的。
需要注意的是,这只是一般情况下的情况,具体的实现还要看代码的具体实现。如果使用了对象池等技术,可能会影响对象的创建和回收,从而影响结果。
java判断两个集合其中相同一个属性的值是否相等
可以通过遍历两个集合,比较每个元素的相同属性值是否相等来判断。具体实现可以参考以下代码:
```java
public boolean compareCollections(List<Object> list1, List<Object> list2, String propertyName) {
// 判断两个集合是否为空或者大小是否相等
if (list1 == null || list2 == null || list1.size() != list2.size()) {
return false;
}
for (int i = 0; i < list1.size(); i++) {
Object obj1 = list1.get(i);
Object obj2 = list2.get(i);
try {
// 反射获取对象的属性值
Field field = obj1.getClass().getDeclaredField(propertyName);
field.setAccessible(true);
Object value1 = field.get(obj1);
Object value2 = field.get(obj2);
// 判断属性值是否相等
if (!Objects.equals(value1, value2)) {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
return true;
}
```
其中,list1 和 list2 分别为需要比较的两个集合,propertyName 为需要比较的属性名。该方法返回一个 boolean 值,表示两个集合的相同属性值是否相等。