有人可以解释为什么Java在以下示例中连接字符串和整数吗?
public class main {
public static void main(String[] args) {
System.out.println("test" + 5);
System.out.println(5 + "5");
}
}
与Python +
运算符的实现有什么不同。
在Python中,这会引发TypeError
:
"5" + 5
答案 0 :(得分:6)
是什么让您认为+
应该以两种不同语言的相同方式行事?在Java中,当你有类似
System.out.println(5 + "5");
55正如您所见,
执行字符串连接。这由Java语言的规范概述(参见JLS §15.18.1)。相比之下,Python并没有强制像Java这样的类型(因此TypeError
);为了进行字符串连接, +
的操作数必须是字符串,这就是你需要的原因
>>> "5" + str(5)
'55'
Python的规范中概述了这一点(参见Python Language Reference §5.6)。没有通用的规则,状态+
必须跨语言以特定方式表现:如果我愿意,我可以创建一种+
执行减法的语言!
作为@Wooble points out,Perl的+
以另一种的方式行事:
$ perl -e 'print 5 + "5"; print "\n"'
10
答案 1 :(得分:0)
简单地说,在Java中,+
运算符因字符串而过载。 Python显然没有实现覆盖,所以你需要找出Python的串联运算符,以使后一种情况有效。
答案 2 :(得分:0)
您得到一个TypeError,因为“5”的类型为string,而5的类型为int。就像有人说的那样,它就是它的设计方式。我猜测部分是为了防止混淆。你想要“5”+ 5等于10还是55?
如果你想55,你可以通过将int转换为字符串
来实现'5' + str(5)
答案 3 :(得分:0)
如果您选中docs
Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串。字符串连接是通过StringBuilder(或StringBuffer)类及其追加方法实现的。
所以,它是特定于java的
答案 4 :(得分:0)
基本上在Python中,您必须执行以下操作:
"5" + str(5)
因为,虽然Python和Java中的字符串对都覆盖了operator +,但在Python中对于字符串和整数没有适当的覆盖,并且在需要时不会将整数隐式地转换为字符串。因此,您需要显式地将5转换为字符串,以便在串联的两侧都有字符串。
答案 5 :(得分:0)
编译器java在内部将5 +“5”转换为StringBuilder,并使用.append(int)将整数“添加”到String。
答案 6 :(得分:0)
在java中,如果a + b中存在字符串类型,那么+将进行连接,而在python中,默认情况下尚未定义两种不同类型的+。因此,正如所建议的那样,在python中,需要在连接之前执行str(Int)。