java string to char array and inverse 导致错误的结果

java string to char array and inverse leads to wrong result

我想将 String 转换为 char [] 以对其执行一些按位运算。

我的第一个方法是使用 java 标准函数:

String foo = "123456789"
char [] bar = foo.toCharArray();
System.out.println(bar.toString); //output: [C@4263e7f8

看来数据是用这个函数改变的。 如果我全部手动完成:

  String foo = "123456789"
  char [] bar = new char[foo.length()];
  for (int i=0; i< foo.length(); i++) {
     bar[i]=foo.charAt(i);
  }

 StringBuilder sb = new StringBuilder();
 for (int i=0; i< bar.length; i++) {
     sb.append(bar[i]);
 }

 System.out.println(sb.toString); //output: 123456789

我的问题是为什么我在使用标准函数时会得到不同的数据。我原以为我总是在 .toCharArray 后跟 .toString 之后得到相同的数据。我不确定 Java 字符串是如何按位表示的。这可能是一个原因吗?

foo.toCharArray() 不会改变数据。如果你想取回原来的String,你应该调用new String(bar)

在数组上调用 toString() 会在 Object class 中执行 toString 方法的默认实现,它显示 class 名称(对于 char 数组显示 [C) 和实例的 hashCode

如果要显示那个数组的字符,使用Arrays.toString(bar)

在第一个代码片段中,bar 是一个 array object。因此,当您尝试打印对象时,它会打印 hashcode

如果在使用 toCharArray() 创建柱形图后使用从 char 数组构建字符串的相同逻辑,您会看到相同的结果。

使用

System.out.println(Arrays.toString(bar)); //to print the result in list form
System.out.println(new String(bar)); //to print the result as a string

JAVA 中,arraysobjects 动态创建的,可以分配给 Object 类型的变量。 class Object 的所有方法都可以在数组上调用。

当您在对象上调用 toString() 时,它 returns 一个 "textually represents" 对象的字符串。因为数组是 Object 的一个实例,所以您只能得到 class 的名称、@ 和一个十六进制值。

每当您尝试使用 toString() 打印数组时,它会打印 hashcode 而不是打印内容。因为:

Java arrays are objects and the direct superclass of an array type is Object.

因此当你试图调用toString方法时,它会直接调用Object的toString方法,即:

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

但是当你使用 StringBuilder class toString() 时,它会 return 一个 String 对象 :

return new String(value, 0, count);