Java与Python中的“+”运算符

时间:2013-08-21 15:20:15

标签: java python string

有人可以解释为什么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

7 个答案:

答案 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)。