黑马程序员技术交流社区

标题: 求教毕老师在18天01中讲解system类的一个问题 [打印本页]

作者: rover0321    时间: 2014-6-14 10:39
标题: 求教毕老师在18天01中讲解system类的一个问题
毕老师的代码是这样写的
  1. Properties prop = System.getProperties();
  2. System.setProperty("mykey", "myvalue");

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

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


作者: 123_yaya    时间: 2014-6-14 11:07
new Properties()是创建一个无默认值的空属性列表。可以通过setProperty往该属性列表添加属性。要加载系统属性是用load(InputStream inStream) 方法实现加载的。
作者: rover0321    时间: 2014-6-14 15:23
123_yaya 发表于 2014-6-14 11:07
new Properties()是创建一个无默认值的空属性列表。可以通过setProperty往该属性列表添加属性。要加载系统 ...

毕老师用的是System类的静态函数getProperty()来得到一个系统的属性。没有通过load的方式。
作者: 铁血丹心    时间: 2014-6-14 17:19
费了我老大劲了
  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. }
复制代码

作者: rover0321    时间: 2014-6-14 18:29
铁血丹心 发表于 2014-6-14 17:19
费了我老大劲了

谢谢您,这下我懂了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2