Java中int和通过ParseInt方法接收的int有什么区别?

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

奇怪的是,收到的输出为:
1 121

我无法理解这个基本的区别,请帮忙解释一下。
9个回答

11

使用如下括号

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拼接,这就解释了你得到的输出结果。

参见


6
那是因为" "的存在。
每当有一个字符串出现时,Java不会对其进行任何计算,只是将其附加为字符串。
因此,在您的情况下,i+1被计算为1,但" "+j+1中有一个字符串。 所以,它们被拼接在一起形成121

但为什么它没有在第一个情况下添加?如果是真的,它应该像01 121一样。 - AurA
在第一个字符串出现之前,任何原始类型/包装类型都会被计算,而在此之后,它们只是被连接在一起。 - Kshitij
1
@AurA:这是因为它基本上会将其转换为类似于:" ".concat(j).concat(1) (或使用StringBuilder的类似版本,这取决于您的代码和JVM版本)。它无法猜测您想要什么,因此自然而然地从左到右进行解释。 - haylem
@Kshitij感谢你编辑答案,现在非常明确了。 haylem感谢你的解释。 - AurA
不是像 01 121 那样... 从概念上讲,它更像是 (0+1) + " ".append(j).append(1) - Kshitij
是的,我明白他的意思了。 - AurA

3

您看到这种行为的原因是+运算符序列从左到右进行求值。因此,它被视为括号内的表达式进行求值:

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

第一个运算符将两个int值相加并产生一个int值。接下来的+将一个int和一个String相加并产生一个String。此后,一切都是字符串连接。您可以添加自己的括号以获得所需的结果。


是的 +1,这确实是最佳答案。 - mprabhat

2

当你使用" "时,其后的表达式会被解析为字符串。

使用括号()将表达式括起来可以解决当前的问题。

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

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

基本上,当您在Java中使用+“”+时,它会将值附加为字符串。

而当您将(j+1)放在括号中时,它的优先级更高,并且首先执行它并执行求和操作。


1

+ 操作符被重载用于加法和字符串拼接,你所做的是字符串拼接而不是加法。使用括号进行加法运算。


1

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


1
这是因为 + 运算符具有左结合性并且具有字符串的重载函数,所以当您有以下代码时:
int i = 0; int k = Integer.parseInt("12"); int j = k; i+1 + " " + j+1
它首先计算 i + 1,得到 1,然后计算 1 + " ",使用其重载函数将 1 和 " " 连接起来,因此它给出了一个值为 "1 " 的字符串。之后它计算 "1 " + j,并且由于其中一个操作数是字符串,所以它执行相同的行为,以此类推。

0

Interger.parseInt (String str) 是一个包装类方法,用于将 String 类型的对象转换为基本数据类型(int)。这通常用于集合框架中将基本数据类型转换为对象以及反之。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接