【问题标题】:tostring() method in java displaying odd values [duplicate]java中的tostring()方法显示奇数值[重复]
【发布时间】:2014-04-27 22:18:52
【问题描述】:

我试图通过在字符串的每一端使用两个指针变量来实现字符串反转算法,其中 i 指向开头,j 指向结尾。交换这些位置的元素,然后 i 和 j 分别递增和递减,直到 i 小于 j 且 i 不等于 j。我在执行此操作时将字符串存储在字符数组中,因为字符串在 java 中是不可变的。但是,当我尝试使用 toString() 方法将此字符数组转换回字符串时,它会显示随机值。我知道代码是正确的,因为如果我输出字符数组,它会显示正确的值。

public class switcher {

int i=0,j;
char temp;

public void reverse(String s){

    char [] ar = s.toCharArray();

    j=ar.length-1;

    while(i!=j&&i<j){
        temp = ar[i];
        ar[i]=ar[j];
        ar[j]=temp;
        i++;
        j--;
    }
    String b=ar.toString();
    System.out.println(b);

    System.out.println(ar);
}

两个打印语句的输出如下:

阿米斯塔德 [C@22a79c31 达西马

如您所见,字符串输出不正确。但是,数组输出是完美的。 请告诉我我做错了什么。

【问题讨论】:

  • 是的,这就是数组返回的 toString。考虑使用System.out.println(java.util.Arrays.toString(ar));
  • ... 或将此字符数组作为新字符串的参数传递,例如 String b=new String(ar);
  • 出于好奇,您在此处发帖之前在 Google 中搜索了什么?
  • 数组打印正确,是我关心的字符串
  • Suraj,阅读 Pshemo 评论中的答案。

标签: java arrays string tostring


【解决方案1】:

如果你想打印应该基于字符数组的字符串,那么你应该用新的字符串对象包装这个数组。所以不是

String b = ar.toString();

使用

String b = new String(ar);

您需要知道数组从 Object 继承 toString() 方法,以便其代码返回

getClass().getName() + "@" + Integer.toHexString(hashCode());

这意味着您将看到[C 作为getClass().getName() 的结果,它表示characters 的一维数组,@ 令牌和十六进制形式的数组十六进制代码22a79c31


如果您想打印具有与char 不同类型数据的数组内容,您将无法将其包装在字符串中。相反,您将不得不遍历每个元素并打印它们。为了避免为此 Java 编写您自己的方法,您可以使用 toString(yourArray) 方法为您提供 java.util.Arrays 类,该方法将遍历数组的每个元素并以形式生成字符串

[element0, element1, element2, ... , elementN-1]

【讨论】:

    【解决方案2】:

    ar.toString() 不会返回字符数组的字符串表示形式。它将返回数组在内存中的索引。如果您希望 b 正确打印输出,请将 ar 作为构造函数传递给它,如下所示: String b = new String(ar);

    【讨论】:

      【解决方案3】:

      正如其他人所说,这是正确的。

      大多数 Java 对象不会在其 tostring 中进行值转换。相反,它们会打印 VM 内部已知的类型的标记化名称。

      要将字符数组转换为字符串以进行打印,您需要执行与将其从字符串转换为相反的操作。

      最简单的方法就是使用带有字符数组的字符串构造函数

      所以与其说:

      System.out.println(ar);
      

      你可以说

      System.out.println(new String(ar));
      

      【讨论】:

        猜你喜欢
        • 2014-01-19
        • 2012-12-07
        • 2016-08-15
        • 2020-09-06
        • 2015-11-01
        • 2018-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多