int i = 0;
int k = Integer.parseInt("12");
int j = k;
System.out.println(i+1 + " " + j+1);
奇怪的是,收到的输出为:
1 121
我无法理解这个基本的区别,请帮忙解释一下。
使用如下括号
System.out.println((i+1) + " " + (j+1));
根据文档,+操作符在语法上是左结合的,无论它后来是否被类型分析确定为字符串连接或加法。在某些情况下需要小心以获得期望的结果。例如,表达式:
a + b + c 总是被视为 (a + b) + c
将此扩展到您的场景
i+1 + " " + j+1
它变成了什么
(((i + 1) + " ") + j)+1
因为i
是一个整数,所以(i + 1) = 1
,就是简单的加法
" "
是一个String
,因此((i + 1) + " ")
= 1
带空格(字符串拼接)
同样地,当j
和最后的1
被添加时,它们被加到一个String
上,因此进行了String
的拼接,这就解释了你得到的输出结果。
参见
" "
的存在。i+1
被计算为1
,但" "+j+1
中有一个字符串。 所以,它们被拼接在一起形成121
。您看到这种行为的原因是+
运算符序列从左到右进行求值。因此,它被视为括号内的表达式进行求值:
System.out.println((((i + 1) + " ") + j) + 1);
第一个运算符将两个int
值相加并产生一个int
值。接下来的+
将一个int
和一个String
相加并产生一个String
。此后,一切都是字符串连接。您可以添加自己的括号以获得所需的结果。
当你使用" "
时,其后的表达式会被解析为字符串。
使用括号(
和)
将表达式括起来可以解决当前的问题。
System.out.println(i+1 + " " + (j+1));
int i = 0;
int k = Integer.parseInt("12");
int j = k;
System.out.println(i+1 + " " + (j+1));
基本上,当您在Java中使用+“”+时,它会将值附加为字符串。
而当您将(j+1)放在括号中时,它的优先级更高,并且首先执行它并执行求和操作。
+
操作符被重载用于加法和字符串拼接,你所做的是字符串拼接而不是加法。使用括号进行加法运算。
parseint基本上会返回int(请查看Java API),而Java中只有一种int类型。在这个例子中,您使用了“”,其中Java将把它视为字符串。在任何操作中,请确保不要混淆字符串和计算。始终使用括号将字符串与计算分开。
Interger.parseInt (String str) 是一个包装类方法,用于将 String 类型的对象转换为基本数据类型(int)。这通常用于集合框架中将基本数据类型转换为对象以及反之。
" ".concat(j).concat(1)
(或使用StringBuilder的类似版本,这取决于您的代码和JVM版本)。它无法猜测您想要什么,因此自然而然地从左到右进行解释。 - haylem01 121
那样... 从概念上讲,它更像是(0+1) + " ".append(j).append(1)
。 - Kshitij