在System.out.println中使用charAt显示整数?

时间:2012-12-06 01:30:58

标签: java

如果我运行这个简单的代码,我得到的输出是一个整数值,任何人都知道为什么? 我正在尝试打印第一个名字的第一个字符和连接在一起的姓氏的前五个字符。

Scanner scan = new Scanner (System.in);
String firstName, lastName;

System.out.print ("Enter First Name: ");
firstName = scan.nextLine();
System.out.print ("\n");
System.out.print ("Enter Last Name: ");
lastName = scan.nextLine();

System.out.println (firstName.charAt(0)+lastName.charAt(0));

5 个答案:

答案 0 :(得分:2)

致电时

System.out.println (firstName.charAt(0)+lastName.charAt(0));

由于添加了字符值本身会产生一个整数值,最终会调用System.out.println(int)

  

我正在尝试打印第一个名字的第一个字符和连接在一起的姓氏的前五个字符。

您可以使用:

System.out.println(firstName.charAt(0) + lastName.substring(0, 5));

答案 1 :(得分:1)

原始char是Java中与原始int兼容的类型,如果添加字符,您将获得其ASCII码的总和。

System.out.println (firstName.charAt(0)+""+lastName.charAt(0));

答案 2 :(得分:1)

试试这个:

Scanner scan = new Scanner (System.in);
String firstName, lastName;

System.out.print ("Enter First Name: ");
firstName = scan.nextLine();
System.out.print ("\n");
System.out.print ("Enter Last Name: ");
lastName = scan.nextLine();
String s = "" + firstName.charAt(0)+""+lastName.substring(0, 5);
System.out.println(s);

答案 3 :(得分:1)

根据Java语言规范:

  

如果+运算符的任一操作数的类型是String,则操作是字符串连接。   否则,+运算符的每个操作数的类型必须是可转换(第5.1.8节)到原始数字类型的类型,否则会发生编译时错误。

http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.18

由于char运算符不支持原始+类型,因此JVM将char值转换为数字值,即ASCII代码。

要获取所需的值,请使用String值(例如,通过调用.substring()),或强制转换为String,如Bobby Dizzle的回答所述。

答案 4 :(得分:0)

当你这样做时: System.out.println (firstName.charAt(0)+lastName.charAt(0));

您基本上尝试使用char添加char。并且编译器实际上尝试使用数值进行添加。所以println打印添加的结果。

要实际打印您想要的内容,可以使用带有字符串的+运算符(使用subString)或使用String.Format

所以你也可以这样写:

System.out.println(String.format("%c %s", firstName.charAt(0), lastName.subString(0,5)));