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
中,arrays
是 objects
动态创建的,可以分配给 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);
我想将 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
中,arrays
是 objects
动态创建的,可以分配给 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);