【问题标题】:How to transform an Object name into a String in Java如何在 Java 中将对象名称转换为字符串
【发布时间】:2021-05-22 20:58:17
【问题描述】:

我想从一个对象的名称中创建一个字符串

例如:

Object objectName = new Object;

现在我想要一个由该对象的名称组成的字符串,以便我可以打印它

System.out.println(stringWithObjectName); \\ print objectName

你是怎么做到的?

【问题讨论】:

  • 你在问toString().......?
  • 一个对象没有“名称”。所以要么objectName 只是一个对象,答案是它不可能,或者它是name 意味着什么的特定类型,你需要在你的问题中更具体......
  • @assylias 我认为他的意思是,如果你有int num = 1,当你有System.out.println(num) 时,他想要打印num?这似乎很奇怪,因为他是给这个名字的人。
  • 您拥有的是变量的名称,而不是对象的名称。 objectName 在其生命周期内可以指向许多不同的对象。
  • @lierwu 我明白了,你可能是对的。这可能会有所帮助:stackoverflow.com/q/744226/829571

标签: java string object


【解决方案1】:

那是..不是它的工作原理。您对 java 的工作原理有一个基本的误解。在:

Object name = new Object();

不是只是创建了一个名为name 的新对象。不,你做了 3 件完全不同的事情:

  1. 您创建了一个 Object 类型的变量,名称为 name。这就像一张白纸,您可以在上面绘制藏宝图。这是Object name; 部分。

  2. 您制作了一个新对象。 (new Object() 部分)。它没有名字。这就像创造一个新的宝箱,然后把它埋在沙子里。

  3. 你已经在你的藏宝图上画出了你刚刚埋藏的宝藏的路线(中间是=)。

您现在可以撕毁您的藏宝图(name = null - 在那里,地图被抹掉了!),但宝藏仍然在那里,埋在沙子里。如果不存在 X 标记该宝藏的其他藏宝图,最终垃圾收集器将挖掘它并摆脱它。

换句话说,对象可以存在于没有变量指向的地方

你也可以多制作藏宝图,复制参考:

Object name = new Object();
Object otherName = name;

现在你有 1 个宝藏(new Object(),没有名字,还有 2 个宝藏地图(nameotherName),当前已经绘制了前往那个宝藏的地图。但是你可以改变它:

Object name = new Object();
Object otherName = name;
name = someOtherObject;

现在是地图的名称,原来上面有这个对象的地图,现在有一个完全不同的宝藏的地图。

你的问题是:我怎样才能问宝藏指向它的地图的名称。希望这个解释清楚地说明为什么这根本不可能,并且 java 不允许您以任何方式这样做。

【讨论】:

  • 我知道垃圾收集器会在没有引用的情况下清除对象,您可以通过说“最终垃圾收集器将挖掘并清除它”来确认这一点,但是比你说的“换句话说,对象可以存在于没有变量指向它的地方”......你的意思是** 不存在** 还是我错过了什么?
  • @LeonardoT。它们可以并且确实存在,一直存在。垃圾收集器不会以瞬时速度工作。您的 VM 将有对象,有资格收集,它们将(最终)被收集 - 但不是马上。没有办法对付它们,所以它们是“存在”还是“不存在”大多是没有实际意义的(其中之一是“如果一棵树倒在森林里而没有人听到它”的情况),但它就在那里,在堆内存中,并且可以正常工作,只要您可以挥动魔杖并获得对它的引用(您不能)。不过,使用 c.s.m.Unsafe 和 native 进行黑客攻击可以帮助您实现目标。
  • 感谢您的详细解释,对我这个学生来说真的很有帮助
【解决方案2】:

变量名在运行时被删除。但是你可以做到这一点的一种方法是使用地图。

Map m = ...;
m.put(object, objectName);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多