我有两个包含相同键的属性实例,但可能包含不同的值(字符串)。检查两个实例中值是否相同的最佳方法是什么?比较两个Properties对象中的值的最佳方法是什么?
现在我使用if条件检查类似下面
if(!p1.getProperty("x").equals(p2.getProperty("x")) {
return true;
}
我有两个包含相同键的属性实例,但可能包含不同的值(字符串)。检查两个实例中值是否相同的最佳方法是什么?比较两个Properties对象中的值的最佳方法是什么?
现在我使用if条件检查类似下面
if(!p1.getProperty("x").equals(p2.getProperty("x")) {
return true;
}
Properties
是HashTable
一个子类,它覆盖equals
。你可以简单地比较使用equals
实例:
properties1.equals(properties2)
但这不会告诉你什么是不同。
要做到这一点,你可以使用properties.keySet()
键,然后比较这两个实例之间的值:
for (String key : properties1.keySet()) {
String value1 = properties1.get(key);
String value2 = properties2.get(key);
// Compare, e.g. value1.equals(value2).
// But may need to take into account missing values.
}
注意,这是不对称的,在这个意义上,它看起来对于其值值存在于properties1
。如果你要搜索键的交集(或联合),只是建立一个集第一:
Set<String> keys = new HashSet<>(properties1.keySet());
// For intersection:
keys.retainAll(properties2.keySet());
// For union:
// keys.addAll(properties2.keySet());
for (String key : keys) { ... }
String value=p1.getProperty("x");
if (value == null) {
if (!(p2.getProperty("x")==null && p2.containsKey("x")))
return true;
} else {
if (!value.equals(p2.getProperty("x")))
return true;
}
什么是财产的性质,如果属性是一个对象,你也比较好比较的哈希码,但如果它们是原始的,就我而言,您可以使用== – Eliethesaiyan
您发布的示例是比较2个字符串。 – LazerBanana
@Eliethesaiyan根据定义,Java属性是字符串。 “属性”类文档是这样说的。因为许多字符串可以具有相同的哈希码,所以您绝对不应该*比较哈希码。 – RealSkeptic