我是Java新手。 我成功执行了以下程序,但我不理解输出。 这是该计划。
public class StringBufferCharAt {
public static void main(String[] args)
{
StringBuffer sb = new StringBuffer("abcdefghijklmnopqrstuvwxyz");
System.out.println("Length of sb : " + sb.length());
int start = 0;
int end = 10;
char arr[] = new char[end - start];
sb.getChars(start, end, arr, 0);
System.out.println("After altering : "+ arr.toString());
}
}
执行此程序后:我得到以下输出:
Length of sb : 26
After altering : [C@21a722ef
我的问题:
答案 0 :(得分:4)
你最后一句中的arr.toString()
给你一个对象的字符串值(doc here),这是一个数组。您可能尝试实现的是类似Arrays.toString(arr)
的内容,它将打印数组的内容(doc)。
答案 1 :(得分:2)
恰好char[]
指定Object#toString()
的字符串表示形式为11个字符:[C
表示它是char[]
,{ {1}}表示以下8个十六进制数字是内存中的地址。正如JavaDoc所述,
此方法返回一个等于值的字符串:
@
Class#getName()
为char数组返回getClass().getName() + '@' + Integer.toHexString(hashCode())
,the default hashCode()
implementation(通常)返回对象在内存中的地址:
这通常通过将对象的内部地址转换为整数来实现,但Java™编程语言不需要此实现技术。
如果您要打印数组内容,使用Arrays.toString()
:
"C["
答案 2 :(得分:1)
你需要有这样的最终印刷声明:
System.out.println("After altering : "+ new String(arr));
OR
System.out.println("After altering : "+ java.util.Arrays.toString(arr));
<强>输出强>
For 1st case: abcdefghij
For 2nd case: [a, b, c, d, e, f, g, h, i, j]
注意: arr.toString()
不会打印数组的内容,这就是为什么需要构造一个新的`String object from char array like in my answer above or call
Arrays.toString(arr)`。
答案 3 :(得分:0)
java中的数组没有任何内置的“人类可读”toString()实现。你看到的只是从数组的内存位置派生的标准输出。
将char []转换为可打印的最简单方法是从中构建一个字符串。
System.out.println("After altering : " + String.valueOf(arr));
答案 4 :(得分:0)
表达式arr.toString()
不会使用char[]
的内容将char[]
转换为字符串;它使用默认的Object.toString()
方法,即打印对象的表示形式(在本例中为数组对象)。你想要的是使用new String(arr)
将字符转换为字符串,或者使用Arrays.toString(arr)
将字符转换为字符。
答案 5 :(得分:0)
我能回答的这个问题的一部分是#1。您将返回11个字符,因为开始和结束变量是索引。 0是一个有效的索引,所以从0到10有11个不同的数字。