【问题标题】:toString() of Integer or Boolean without returning Object ID整数或布尔值的 toString() 不返回对象 ID
【发布时间】:2012-09-17 16:58:37
【问题描述】:

我有一组代表数字逻辑门的类,我想创建一个 toString() 命令,它将递归地通过并打印它们。问题是它们可以包含 Gate、Boolean 或 Integer,当我调用 Boolean.toString() 或 Integer.toString() 时,会打印对象 ID 而不是分配的值。有没有办法在这些对象上通用调用 toString() (或类似的)命令并让它们打印分配的值?

使用下面的代码,输出类似于:“AND([I@6ca1c,[Z@1bf216a)”

我希望它看起来像:“AND(11,true)”

public static class Gate{
    public Object in1;
}

public static class ANDgate extends Gate{

    public Object in2;

    public ANDgate(Object first,Object second){
        in1 = first; // these can be Integer, Boolean, or another Gate
        in2 = second;
    }
    public String toString(){
        return("AND(" + in1 + "," + in2 + ")");
    }
}

public static class NOTgate extends Gate{

    public NOTgate(Object obj){
        in1 = obj; // this can be Integer, Boolean, or another Gate

    }
    public String toString(){
        return("NOT(" + in1 + ")");
    }
}

【问题讨论】:

  • 这似乎不是散列值 - 看起来像 JVM 对象 ID(散列值是一个 int)。顺便提一句。 Integer.toString() 不返回哈希值,它以十进制格式返回整数值。也许您可以提供一个示例如何使用此方法?
  • @home:抱歉,我仍在努力理解 Java 中所有正确的语言。我已将问题更新为更准确。

标签: java object tostring


【解决方案1】:

您的输出清楚地表明您将int[]boolean[] 传递给您的构造函数,而不是您所说的IntegerBoolean(请参阅Class.getName() 了解二进制类型名称的含义,例如[I) .

如果符合预期,您需要提供自己的函数来将数组转换为 String,并在使用返回基于哈希值的数组的默认 toStirng() 实现时使用它。

【讨论】:

  • 没错! [Z@... 是您在 boolean[] 上调用 toString 时打印的内容,[I@ 显示为 int[]
  • 谢谢,您实际上在我的代码中发现了另一个错误!我打算传递从数组中提取的元素,但我忘记索引它们并多次发送整个数组。
  • @DavidK:当我建议以更类型安全的方式执行此操作时:实现一个特殊的 Gate 子类,它包含一个原始值,并传递 Gates 而不是 @987654337 @s.
猜你喜欢
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 2019-10-09
  • 1970-01-01
  • 2021-08-23
相关资源
最近更新 更多