我想将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是如何按位表示的。这可能是个原因吗?
答案 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())
但是当您使用StringBuilder
类toString()
时,它将返回String
个对象:
return new String(value, 0, count);