如何获取 Java 对象的地址?

2022-09-02 23:16:10

有没有办法获取Java对象的地址?

问题从何而来?:首先,我读取属性文件,并将文件中的所有数据放入表中。属性文件可以更新。所以,我想听那个文件。我使用 PropertyChangeSupport 和 PropertyChangeListener 侦听一个对象。

updatedStatus = new basit.data.MyString();
    updatedStatus.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

        //After changes "i", we inform the table model about new value
            public void propertyChange(PropertyChangeEvent evt) {
                Object objec=evt.getNewValue();
                tableModel.setValueAt(objec.toString(), 0, 5);
            }
        });

如果更新状态更改,那么我更新表。MyString 类具有私有字符串“Value”。我想侦听属性文件。因此,它应该使 updateStatus.value 和 String of Properties File 在同一地址相等。如果我能做到这一点,所以我不需要听属性文件。

updatedStatus.setValue(resourceMap.getString("HDI.Device.1.Name"));

我试图使用StringBuffer,但我无法实现它。这就是为什么,我问了这个问题。


答案 1

首先 - 不,你不能在Java中获取对象的地址;至少,不是没有调试代理等的纯Java。一方面,地址可以随着时间的推移而移动。你不需要它。

其次,遵循您的解释有点困难,但是如果不监听文件本身的更改,您肯定无法逃脱。将文件加载到对象中后,以后对磁盘上文件所做的任何更改都将不会在该对象中可见,除非您专门重新加载它。Properties

基本上,您应该在此时侦听对文件的更改(或轮询它)并重新加载文件(放入新的或覆盖现有文件)。是否还需要侦听字符串容器上的更新将取决于您的应用程序。Properties


答案 2

System.identityHashCode(obj)提供下一个最好的东西:每个对象都有一个唯一的数字。它对应于默认实现。Object.hashCode()

引用API的话:“在合理实用的情况下,由Object类定义的hashCode方法确实为不同的对象返回不同的整数。(这通常是通过将对象的内部地址转换为整数来实现的,但JavaTM编程语言不需要这种实现技术。