5
int i = 0;
int k = Integer.parseInt("12");
int j = k;
System.out.println(i+1 + " " + j+1);

奇怪的是收到的输出是

1 121

我无法弄清楚这个基本区别。请帮我。

4

9 回答 9

11

使用括号如下

System.out.println((i+1) + " " + (j+1));

文档

+ 运算符在语法上是左结合的,无论它是后来由类型分析确定是表示字符串连接还是加法。在某些情况下,需要小心才能获得所需的结果。例如,表达式:

a + b + c 始终被视为含义: (a + b) + c

将此扩展到您的场景

i+1 + " " + j+1

它成为了

(((i + 1) + " ") + j)+1

因为i是一个 int 所以(i + 1) = 1,简单的加法

" "是一个String因此((i + 1) + " ")= 1 WITH SPACE(字符串连接

类似地,当j和 last1被添加时,它被添加到一个String因此发生的String 连接中,这证明了你得到的输出是正确的。

于 2012-06-13T05:12:28.143 回答
6

那是因为" ".

每当一个字符串出现时,java 不会在此之后进行任何计算,只是将其附加为字符串。

因此,在您的情况下,i+1计算为1,但" " + j+1其中包含字符串。所以,它只是附加在一起形成 121

于 2012-06-13T05:13:40.830 回答
3

您看到此行为的原因是运算符序列+是从左到右计算的。所以它被评估为好像用括号括起来的:

System.out.println((((i + 1) + " ") + j) + 1);

第一个运算符将两个int值相加并产生一个int值。接下来将 a+添加int到 aString并生成 a String。之后,一切都是字符串连接。你可以引入自己的括号来得到你想要的结果。

于 2012-06-13T05:15:09.377 回答
2

当您使用" "之后的表达式被评估为字符串。

使用括号()表达式周围可以解决手头的问题。

System.out.println(i+1 + " " + (j+1));
于 2012-06-13T05:15:44.673 回答
2
    int i = 0;
    int k = Integer.parseInt("12");
    int j = k;
    System.out.println(i+1 + " " + (j+1));

基本上,当您在此 java 之后放置 + " " + 时,只会将值附加为字符串。

当你把 (j+1) 放在括号中时,它的优先级会更高,它首先执行它并执行求和运算。

于 2012-06-13T05:12:55.960 回答
1

+运算符为加法和字符串连接重载,您正在做的是字符串连接而不是加法。使用括号执行加法。

于 2012-06-13T05:16:22.993 回答
1

parseint 基本上会返回 int(看 Java API),而 Java 中只有一种 int 类型。在本例中,您使用了“”,java 会将其视为字符串。在任何操作中,请确保不要将字符串与计算混淆。始终使用括号将字符串与计算分开。

于 2012-06-13T05:18:04.593 回答
1

发生这种情况是因为 + 运算符已经离开关联性并且有一个带有字符串的重载函数,所以当你有这个时

int i = 0; int k = Integer.parseInt("12"); int j = k; i+1 + " " + j+1

它首先求和 i + 1,然后求和1 + " ",它使用它的重载函数来连接 1 和“”,因此它给出了一个值为“1”的字符串。之后它求和"1 " + j,因为其中一个操作数是一个字符串,所以它执行相同的行为,依此类推。

于 2012-06-13T05:22:19.200 回答
0

Interger.parseInt(String str) 是一个包装类方法,用于将 String obj 类型转换为原始数据类型 (int)。这通常用于集合框架中,用于将原始数据类型转换为对象,反之亦然

于 2013-09-14T17:21:11.633 回答