如何在Java中将对象名转换为字符串
我想从一个对象的名称生成一个字符串 例如:如何在Java中将对象名转换为字符串,java,string,object,Java,String,Object,我想从一个对象的名称生成一个字符串 例如: Object objectName = new Object; 现在我想要一个由该对象的名称组成的字符串,以便打印它 System.out.println(stringWithObjectName); \\ print objectName 如何做到这一点?变量名在运行时被擦除。但有一种方法可以做到这一点,那就是使用地图 Map m = ...; m.put(object, objectName); 那是。。不是它的工作原理。您对java的工作原
Object objectName = new Object;
现在我想要一个由该对象的名称组成的字符串,以便打印它
System.out.println(stringWithObjectName); \\ print objectName
如何做到这一点?变量名在运行时被擦除。但有一种方法可以做到这一点,那就是使用地图
Map m = ...;
m.put(object, objectName);
那是。。不是它的工作原理。您对java的工作原理有一个基本的误解。在:
Object name = new Object();
您不仅创建了名为name
的新对象。不,你做了3件完全不同的事情:
name
的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也不允许你这样做。你是在问
toString()
…?一个对象没有“名称”所以要么objectName
只是一个对象,答案是它不可能,要么它是一种特定类型,对于这种类型,name
意味着什么,你需要在你的问题中更具体一些…@assylias我想他的意思是,如果你有int num=1
,当你做System.out.println(num)时
,他想要打印num
?这似乎很奇怪,因为他是给出名称的人。你拥有的是变量的名称,而不是对象的名称。objectName在它的生命周期中可以指向许多不同的对象。@lierwu,我明白了,你可能是对的。这可能会有帮助:我知道垃圾收集器在没有重新命名的情况下如何处理对象引用,你可以通过说“垃圾收集器最终会把它挖出来并处理掉”来确认这一点,但是你说“换句话说,对象可以存在于没有变量指向它的地方”…你是说**不可能存在**还是我遗漏了什么?@LeonardoT。它们可以而且确实一直存在。垃圾收集器不会以瞬时速度工作。你的虚拟机将拥有符合收集条件的对象,并且它们(最终)会存在被收集——但不是立即收集。没有办法找到它们,所以它们“存在”或“不存在”大多是没有意义的(其中一种是“如果一棵树在森林中倒下,没有人听到”的情况),但它就在那里,在堆内存中,如果你能挥动一根魔杖并获得它的引用(你不能)不过,使用c.s.m.不安全和本地的黑客可以让你达到目的。谢谢你的详细解释,对我这个学生来说,这真的很有帮助