比较判断逻辑是在代码中经常使用的,在Python中常用'=='和is来做比较判断。==:双等号是用来比较变量所指向内存单元中的值是否相等,它只关心值,并不在意值的内存地址,也就是说可以是两个不同内存地址的值相等。is:它用来比较两个变量是不是指向同一个内存单元,虽然它也可以比较值,但是它更加关心的是内存地址是否一样,当然内存地址一样值也就是一样的。关于整数#按照逻辑,下面的代码很正常>>>a=1>>>b=1>>>a==bTrue>>>aisbTrue>>>id(a)1570522768>>>id(b)1570522768#下面就是颠覆认知的时刻>>>a=1000>>>b=1000>>>a==b
比较判断逻辑是在代码中经常使用的,在Python中常用'=='和is来做比较判断。==:双等号是用来比较变量所指向内存单元中的值是否相等,它只关心值,并不在意值的内存地址,也就是说可以是两个不同内存地址的值相等。is:它用来比较两个变量是不是指向同一个内存单元,虽然它也可以比较值,但是它更加关心的是内存地址是否一样,当然内存地址一样值也就是一样的。关于整数#按照逻辑,下面的代码很正常>>>a=1>>>b=1>>>a==bTrue>>>aisbTrue>>>id(a)1570522768>>>id(b)1570522768#下面就是颠覆认知的时刻>>>a=1000>>>b=1000>>>a==b
JDK6及之前字符串常量池是放在永久代的,这里不讨论,JDK7之后将字符串常量池迁移到了JVM的堆中,注意删除永久代更换为元空间是JDK8哈。测试代码1如下:@Testpublicvoidtest01(){Stringstr2=newStringBuilder("12").append("34").toString();Stringintern=str2.intern();Stringstr1="1234";System.out.println(str2==intern);System.out.println(str1==intern);}输出结果:truetrue测试代码2如下:@Testp
JDK6及之前字符串常量池是放在永久代的,这里不讨论,JDK7之后将字符串常量池迁移到了JVM的堆中,注意删除永久代更换为元空间是JDK8哈。测试代码1如下:@Testpublicvoidtest01(){Stringstr2=newStringBuilder("12").append("34").toString();Stringintern=str2.intern();Stringstr1="1234";System.out.println(str2==intern);System.out.println(str1==intern);}输出结果:truetrue测试代码2如下:@Testp