之间有什么区别
final Properties properties = new Properties(System.getProperties());
和
final Properties properties = new Properties();
properties.putAll(System.getProperties());
我已将此更改视为fix commit in JBoss AS。
答案 0 :(得分:6)
这是一个展示差异的例子:
import java.util.*;
public class Test {
public static void main(String[] args) {
Properties defaults = new Properties();
defaults.setProperty("x", "x-default");
Properties withDefaults = new Properties(defaults);
withDefaults.setProperty("x", "x-new");
withDefaults.remove("x");
// Prints x-default
System.out.println(withDefaults.getProperty("x"));
Properties withCopy = new Properties();
withCopy.putAll(defaults);
withCopy.setProperty("x", "x-new");
withCopy.remove("x");
// Prints null
System.out.println(withCopy.getProperty("x"));
}
}
在第一种情况下,我们为“x”属性添加一个新的非默认值,然后将其删除;当我们要求“x”时,实现会发现它不存在,并参考默认值。
在第二种情况下,我们将默认值复制到属性中,但没有表明它们是默认值 - 它们只是属性的值。然后我们将“x”的值替换掉,然后将其删除。当请求“x”时,实现将发现它不存在,但它没有任何默认值,因此返回值为null。
答案 1 :(得分:2)
第一个将给定属性设置为默认值;第二个将它们设置为非默认值。
答案 2 :(得分:0)
还有一件事:putAll()
将不复制默认值。
import java.util.*;
public class Test {
public static void main(String[] args) {
Properties defaults = new Properties();
defaults.setProperty("x", "x-default");
Properties withDefaults = new Properties(defaults);
// Prints x-default
System.out.println(withDefaults.getProperty("x"));
Properties withCopy = new Properties();
withCopy.putAll(withDefaults);
// Prints null
System.out.println(withCopy.getProperty("x"))
}