【问题标题】:String literal with toCharArray() producing garbage in Java带有 toCharArray() 的字符串文字在 Java 中产生垃圾
【发布时间】:2016-04-30 04:17:47
【问题描述】:

我想创建一个字母表的 char 数组。我看了这篇文章:

Better way to generate array of all letters in the alphabet

是这么说的:

char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();

所以在我的代码中我有:

public class Alphabet {

private char[] letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();

public String availableLetters(){

    return letters.toString();
   } 

}

当我从 main() 调用函数 availableLetters() 并将它打印到控制台时,它会输出这个垃圾:

[C@15db9742

我做错了什么?

【问题讨论】:

  • 垃圾(Java)产生垃圾。这就是所谓的生产垃圾。
  • 对不起。我只是一个新手
  • 没有必要道歉,这是一个有效的问题。

标签: java string char literals garbage


【解决方案1】:

数组是正确的,问题是你没有正确打印它。

如果你一次打印一个字符,你会得到正确的结果:

for (char c : letters) {
    System.out.print("'" + c + "' ");
}

demo

不幸的是,Java 标准类库没有为数组提供有意义的 toString() 覆盖,这给刚接触该语言的程序员带来了很多麻烦。

【讨论】:

    【解决方案2】:

    如果要以数组形式打印,则使用:

    System.out.println(Arrays.toString(letters));
    

    顺便说一句[C@15db9742 并不是真正的垃圾。当一个类没有覆盖 toString() 方法时,它会被打印出来。

    来自Object.toString()

    返回对象的字符串表示形式。一般来说, toString 方法返回一个“以文本形式表示”的字符串 目的。结果应该是简洁但信息丰富的表示 这对一个人来说很容易阅读。建议所有 子类覆盖此方法。类 Object 的 toString 方法 返回一个字符串,该字符串由该类的名称组成 object 是一个实例,at-sign 字符 `@' 和 unsigned 对象的哈希码的十六进制表示。其他 换句话说,这个方法返回一个字符串等于:

    getClass().getName() + '@' + Integer.toHexString(hashCode())

    【讨论】:

      【解决方案3】:

      您可以将 char 数组传递给 String 构造函数或静态方法 String.valueOf(),然后将其返回。

      【讨论】:

        猜你喜欢
        • 2010-09-21
        • 2015-01-28
        • 2013-02-25
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多