Jython:关键字“ is”的行为不同

时间:2019-08-23 09:41:34

标签: java python-2.7 jython

我正在用Python编写一些脚本,这些脚本需要与某些Java库一起使用,因此我使用Jython。我注意到在编译后,将变量与is进行比较会产生与Python Shell中不同的结果。

我知道is==在Python中的用途不同,但是在shell中编译匹配行为之后的行为不应该吗?

这是我在脚本中编写的简化功能:

def test(myString='AAA'):
    print myString is 'AAA'

test()

现在,当我使用Python运行此程序时,结果为True,但是在使用Jython编译后,结果为False。

此后,我将is关键字更改为==,结果匹配。

我很好奇为什么结果不同。我假设编译后,Java将检查引用而不是值,但是Python也应该,对吧?

1 个答案:

答案 0 :(得分:0)

Python中的is关键字用于测试两个值是否引用同一对象。在您的示例中,仅当字符串是 interned (参见https://en.wikipedia.org/wiki/String_interning)时,它才会返回True。这是高度实现特定的。

要按字典顺序比较字符串,应使用==