如何在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.不安全和本地的黑客可以让你达到目的。谢谢你的详细解释,对我这个学生来说,这真的很有帮助