java字符串到字符数组和反转导致错误结果
我想将字符串转换为char[],以便对其执行一些位操作 我的第一种方法是使用java标准函数:java字符串到字符数组和反转导致错误结果,java,string,char,Java,String,Char,我想将字符串转换为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.le
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
String foo=“123456789”
char[]bar=新字符[foo.length()];
对于(int i=0;i
我的问题是为什么在使用标准函数时会得到不同的数据。我希望我总是在.tocharray后面跟.toString之后得到相同的数据。我不确定Java字符串是如何按位表示的。这可能是一个原因吗?foo.tocharray()
不会更改数据。如果要恢复原始字符串,应调用newstring(bar)
对数组调用toString()
将执行Object
类中toString
方法的默认实现,该方法显示实例的类名(对于char
数组,它显示[C
)和hashCode
如果要显示该数组的字符,请使用Arrays.toString(bar)
foo.tocharray()
不会更改数据。如果要恢复原始字符串,应调用new String(bar)
对数组调用toString()
将执行Object
类中toString
方法的默认实现,该方法显示实例的类名(对于char
数组,它显示[C
)和hashCode
如果要显示该数组的字符,请使用
Arrays.toString(bar)
在第一个代码段中,bar是一个数组对象
。因此,当您试图打印该对象时,它会打印它hashcode
如果使用与使用
toCharArray()
创建bar后从char
数组生成字符串相同的逻辑,则可以看到相同的结果。在第一个代码段中,bar是一个数组对象
。因此,当您尝试打印该对象时,它会打印它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
中,数组
是动态创建的对象
,可以分配给对象
类型的变量。类对象
的所有方法都可以在数组上调用
在对象上调用toString()
时,它会返回一个“文本表示”对象的字符串。因为数组是对象的实例,所以只能得到类的名称、@和十六进制值。使用
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
中,数组
是动态创建的对象
,可以分配给对象
类型的变量。类对象
的所有方法都可以在数组上调用
在对象上调用
toString()
时,它会返回一个“文本表示”该对象的字符串。因为数组是对象的实例,所以只能得到类的名称、@和十六进制值。每当尝试使用toString()打印数组时
,它将打印hashcode
,而不是打印内容。因为:
Java数组是对象,数组类型的直接超类是
反对
因此,当您尝试调用toString
方法时,它将直接调用对象的toString方法,即:
getClass().getName() + '@' + Integer.toHexString(hashCode())
但是当您使用StringBuilder
classtoString()
时,它将返回一个String
对象:
return new String(value, 0, count);
每当您尝试使用
toString()
打印数组时,它将打印hashcode
,而不是打印内容。因为:
Java数组是对象,数组类型的直接超类是
反对
因此,当您尝试调用toString
方法时,它将直接调用对象的toString方法,即:
getClass().getName() + '@' + Integer.toHexString(hashCode())
但是当您使用StringBuilder
classtoString()
时,它将返回一个String
对象:
return new String(value, 0, count);
您正在调用char数组类型的toString方法。该方法使用默认实现。结果是正确的,但不要只使用sop(myArray);这将获得您不想要/预期的结果。另一方面,StringBuilder有一个toString的实现,它可以获得您想要的结果。谢谢您的所有答案-我不能投票选择“答案”然而,我并不期望同一个函数有不同的实现。每个类都有自己的toString实现。它不是在类本身中实现的,而是从它的超类中获取实现。您正在调用char数组类型的toString方法。这使用默认实现。结果是正确的,但不正确ust go sop(myArray);这将获得您不想要/预期的结果。另一方面,StringBuilder有一个toString的实现,它可以获得您想要的结果。谢谢您的所有答案-我不能投票选择“答案”然而,我并不期望同一个函数有不同的实现。每个类都有自己的toString实现。如果它不是在类本身中实现的,它会从它的超类中获取实现。