我想从对象的名称中创建一个字符串
例如:
Object objectName = new Object;
现在我想要一个由对象的名字组成的字符串这样我就可以打印它了
System.out.println(stringWithObjectName); \ print objectName
你是怎么做到的?
那是…不是这样的。您对java的工作原理有一个根本性的误解。:
Object name = new Object();
你做了不是刚刚创建了一个名为name
的新对象。不,你做了三件完全不同的事情:
您创建了一个名为
name
的Object类型变量。这就像一张白纸,你可以在上面画藏宝图。这是Object name;
部分您创建了一个新对象。(
new Object()
部分)。它没有名字。这就像创造了一个新的宝箱,然后把它埋在沙子里。你已经在你的藏宝图上绘制了通往你刚刚埋藏的宝藏的路线(即中间部分的
=
)。
你现在可以撕毁你的藏宝图(name = null
-在那里,消灭了地图!),但宝藏仍然在那里,埋在沙子里。如果不存在X标记该宝藏的其他藏宝图,最终垃圾收集器将挖掘并处理它。
换句话说,对象可以存在于没有变量指向它的地方.
你也可以制作更多的藏宝图并复制参考:
Object name = new Object();
Object otherName = name;
现在你有1个宝藏(new Object()
,没有名字)和2个宝藏地图(name
和otherName
),目前已经在它们上面绘制了通往宝藏的地图。但是你可以修改:
Object name = new Object();
Object otherName = name;
name = someOtherObject;
现在的地图名称,原来有一个地图到这个对象,现在有一个地图到一些完全不同的宝藏。
你的问题是:我怎么能问宝藏指向它的地图的名字。希望这个解释能够清楚地说明为什么这根本不可能,并且java不允许您以任何方式这样做。
变量名在运行时被擦除。但有一种方法是使用map。
Map m = ...;
m.put(object, objectName);