java字符串到char数组和反向导致错误的结果

时间:2015-06-09 08:07:07

标签: java string char

我想将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 String是如何按位表示的。这可能是个原因吗?

4 个答案:

答案 0 :(得分:7)

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

如果使用与使用char创建栏后从toCharArray()数组构建字符串相同的逻辑,则可以看到相同的结果。

答案 1 :(得分:1)

foo.toCharArray()不会改变数据。如果要返回原始字符串,请调用new String(bar)

在数组上调用toString()执行toString类中Object方法的默认实现,该方法显示类名(对于它显示的char数组{{1} })和实例的[C

如果要显示该数组的字符,请使用hashCode

答案 2 :(得分:1)

使用

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中,arrays是动态创建的objects,可以分配给Object类型的变量。可以在数组上调用类Object的所有方法。

当你在一个对象上调用toString()时,它会返回一个&#34;文本表示&#34;的字符串。物体。因为数组是Object的一个实例,所以你只能获得类的名称,@和十六进制值。

答案 3 :(得分:1)

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

  

Java数组是对象,数组类型的直接超类是   对象

因此,当您尝试调用toString方法时,它将直接调用Object的toString方法,即:

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

但是当您使用StringBuildertoString()时,它将返回String个对象:

return new String(value, 0, count);