代码是
String veggie = "eggplant";
int length = veggie.length();
char zeroeth = veggie.charAt(0);
char third = veggie.charAt(4);
String caps = veggie.toUpperCase();
System.out.println(veggie + " " + caps);
System.out.println(zeroeth + " " + third + " " + length);
System.out.println(zeroeth + third + length);
输出显示:
eggplant EGGPLANT
e 1 8
217
这对我没有意义。引用charAt输出数字而不是字符。我期待它输出字符。我做错了什么?
答案 0 :(得分:5)
第二行应该是:
e l 8
(请注意,第二个值是小写的L,而不是1),这可能没有违反您的预期。虽然你的变量被称为third
,但它是字符串中的第五个字符。
刚离开第三行。表达式的类型
zeroeth + third + length
是int
...您正在执行算术加法。没有涉及String
的隐式转换,因此,从每个操作数到int
的二进制数字促销。它有效:
System.out.println((int) zeroeth + (int) third + (int) length);
它总结了所涉及的UTF-16代码单元' l' l'和8(长度)。
如果您想要涉及字符串转换,那么您可以使用:
System.out.println(String.valueOf(zeroeth) + third + length);
只有第一个添加需要是字符串连接...之后,它会因关联性而流动。 (即x + y + z
为(x + y) + z
;如果x + y
的类型为String
,则第二次添加也会成为字符串连接。)
答案 1 :(得分:0)
编译器将所有变量解释为值而不是字符串。
尝试System.out.println(“”+ zeroeth + third + length);
答案 2 :(得分:0)
这一行正在进行整数运算:
System.out.println(zeroeth + third + length);
换句话说,它是添加每个字符的unicode值(即e是101,l是108,8是8)。要进行字符串连接,可以在前面添加一个空字符串:
System.out.println("" + zeroeth + third + length);
由于从左到右进行评估,它首先会进行字符串连接(而不是添加)。它将继续这样做第三和长度。最后添加“”将不起作用,因为首先会添加。
答案 3 :(得分:0)
您可以使用包装器类Character的方法来显示char变量的字符串值:
System.out.println(Character.toString(zeroeth) + Character.toString(third) + length);
这样,你总是使用String值,并且不可能显示或添加字符的数值,也不需要连接空字符串(“”)来将char变量转换为字符串值。