A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

毕老师的代码是这样写的
  1. Properties prop = System.getProperties();
  2. System.setProperty("mykey", "myvalue");

  3. ...
  4. // 打印prop中的键值对
复制代码

我的问题是:获取系统属性在前,设置新的键值对在后,打印的时候为什么还能打印出新添加的键值对?先谢谢大家。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 认真的态度,给你个赞~

查看全部评分

6 个回复

倒序浏览
new Properties()是创建一个无默认值的空属性列表。可以通过setProperty往该属性列表添加属性。要加载系统属性是用load(InputStream inStream) 方法实现加载的。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
123_yaya 发表于 2014-6-14 11:07
new Properties()是创建一个无默认值的空属性列表。可以通过setProperty往该属性列表添加属性。要加载系统 ...

毕老师用的是System类的静态函数getProperty()来得到一个系统的属性。没有通过load的方式。

点评

你的问题是理解错了new propeties的意思了。new properties的意思我前面已经说了。  发表于 2014-6-14 15:31
getProperty()也可以得到系统属性啊,load方法是加载一个配置文件进来的。  发表于 2014-6-14 15:30
回复 使用道具 举报
费了我老大劲了
  1. public class SystemProperties {

  2.         public static void main(String[] args) {
  3.                
  4.                 Properties prop = System.getProperties();
  5.                 Properties prop1 = System.getProperties();
  6.                 System.out.println(prop==prop1);
  7.                 //结果是true,说明并没有新的集合产生,说明这个prop和prop1都只是地址引用,实际指向的是底层的一个集合。
  8.                 //也就是说,我们只改动集合的内容,不改动集合的地址,prop仍然会指向这个集合.这个就相当于
  9.                 Properties p1 = new Properties();//给p1分配一个地址,指向一个propertise集合
  10.                 Properties p2 = new Properties();
  11.                 p2=p1;
  12.                 p2.setProperty("Mykey","Myvalue");
  13.                 System.out.println(p1);//结果是 {Mykey=Myvalue},对p2操作也会影响到p1,说明p1和p2都只是地址引用。
  14.                
  15.                 //System.setProperty(key, value) 也是在对底层的那个集合做修改,并没有影响到prop指向这个集合

  16.         }

  17. }
复制代码
回复 使用道具 举报

谢谢您,这下我懂了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马