今天,无意中看到知乎上一个关于Java的问题大概是这样的
String a="a";String b="a"; 为什么 a==b 值为 true?
咋的一看,无非就是因为它是字符串常量,它被放到了一个共享的地方,这个地方称为字符串常量池,它保存所有的常量字符串,每个常量只会被保存一份,被所有所有者共享。出于好奇,我也想了解一下Python这方面的知识。以前看过一些资料,我知道Python是有常量池存在的,但是是小整数常量池,比如
a = 1
b = 1
a == b # true
a is b # true
c = 1234
d = 1234
c == d # true
c is d # false
这里也比较好理解,a is b
为true是因为a和b都是小整数,它们都放在小整数常量池中, c is d
为false的原因是c和d不在小整数常量池中,那么小整数常量池的范围是多少呢?大概范围是这样的:(-5, 256)。
然后再看下面一段代码:
a = 'ab'
b = 'ab'
a == b # true
a is b # true
c = str(100)
d = str(100)
c == d # true
c is d # false
这里我就比较疑惑了,为啥 a is b
为true呢?难道Python中也有一个字符串常量池吗?那为什么c is d
为false呢?在stackoverflow中找到了一个回答,可以解决我的问题。想通了也比较简单,c 和 d可以类比于java中的这段语法
String c = new String('100');
String d = new String('100');
这里 c和d自然不是同一个对象。