为什么'0'+ 1或'1'+ 1导致不同的数字?

时间:2013-12-18 19:39:42

标签: java

我正在读考试,并想知道为什么跟随'数字'代码语句导致一个完全不同的数字。

public class HelloWorld{    
     public static void main(String []args){
        System.out.println('1' + 1); // prints 50
        System.out.println('2' + 1); // prints 51
        System.out.println('2'); // prints 2
     }
}

8 个答案:

答案 0 :(得分:7)

当您说'1'并添加1时,在添加(binary numeric promotion)之前,这些值会提升为int1 has the ASCII value 49,因此49 + 1 = 50,2的ASCII值为50,因此50 + 1 = 51。

但是,如果您不添加,则会调用println method that takes a char,并打印'2'

答案 1 :(得分:2)

http://www.asciitable.com/

1的ASCII值为49,因此在执行System.out.println('1' + 1);时,首先将char '1'转换为其ASCII值(49),然后添加1,结果为50。

在最后一个示例中,没有添加,因此字符不会转换为其整数表示。

同样,您可以添加'f'1

System.out.println('f' + 1); // prints: 103

答案 2 :(得分:0)

System.out.println('1'+ 1);

Java将看到算术运算并尝试打印该操作的结果。因此,Java会将char '1'转换为ASCII码值49,49 + 1 = 50,因此它打印“50”

<强>的System.out.println( '2');

此处没有算术,所以只打印char

答案 3 :(得分:0)

首先'2'+1等于51,而不是50。

单一数字内的数字表示为ascii值,而不是实数。 ascii为1为49,49和1等于50.检查ascii代码here

答案 4 :(得分:0)

除了以上所有答案。 键入 System.out.println('2'); 时//它只打印字符串2。
有关详细的ascii值,请参阅http://www.newebgroup.com/academy/tables/ascii.htm

答案 5 :(得分:0)

当您使用单引号'1'时,Java会将其解析为char类型。当您对具有int的char类型执行操作时,Java将获取该char的十进制值并将其用于操作。使用ASCII Table,您可以看到'1'的ascii值为49(而'2'50),因此添加1即可{分别为{1}}和50。然后,51会打印出System.out.println结果。

当您使用int时,它会打印出System.out.println('2') ascii值,这就是您获得char的原因。

答案 6 :(得分:0)

'1'表示一个字符,其ASCII值为49。 它被添加到1,因此您获得了50

在最后一种情况下,您不会向char添加任何内容,因此println会打印2

答案 7 :(得分:0)

System.out.println('1' + 1); // prints 50
System.out.println('2' + 1); // prints 51
System.out.println('2'); // prints 2

在解析参数时,它将假定整个表达式应为int类型。因此,它会将char '1'转换为其ASCHII值(int值),即49
因此49 + 1 = 50

同样,'2' == 50所以50 + 1 = 51

但是,当您仅将'2'作为参数传递时,它只会按原样打印char,因为它没有理由被解析为int,就像在其他情况。