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
是一个 int 所以(i + 1) = 1
,简单的加法
" "
是一个String
因此((i + 1) + " ")
= 1
WITH SPACE(字符串连接)
类似地,当j
和 last1
被添加时,它被添加到一个String
因此发生的String
连接中,这证明了你得到的输出是正确的。
看
那是因为" "
.
每当一个字符串出现时,java 不会在此之后进行任何计算,只是将其附加为字符串。
因此,在您的情况下,i+1
计算为1
,但" " + j+1
其中包含字符串。所以,它只是附加在一起形成 121
您看到此行为的原因是运算符序列+
是从左到右计算的。所以它被评估为好像用括号括起来的:
System.out.println((((i + 1) + " ") + j) + 1);
第一个运算符将两个int
值相加并产生一个int
值。接下来将 a+
添加int
到 aString
并生成 a 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 会将其视为字符串。在任何操作中,请确保不要将字符串与计算混淆。始终使用括号将字符串与计算分开。
发生这种情况是因为 + 运算符已经离开关联性并且有一个带有字符串的重载函数,所以当你有这个时
int i = 0;
int k = Integer.parseInt("12");
int j = k;
i+1 + " " + j+1
它首先求和
i + 1
,然后求和1 + " "
,它使用它的重载函数来连接 1 和“”,因此它给出了一个值为“1”的字符串。之后它求和"1 " + j
,因为其中一个操作数是一个字符串,所以它执行相同的行为,依此类推。
Interger.parseInt(String str) 是一个包装类方法,用于将 String obj 类型转换为原始数据类型 (int)。这通常用于集合框架中,用于将原始数据类型转换为对象,反之亦然