Python
昨天在讲Python的过程中,发现了一个小问题,当时课上没有解决,下面特意查阅资料解决了一下。
a = "123"
b = "123"
print(id(a) == id(b)) #此处结果为True,也可以写成print(a is b)
c = "python.org"
d = "python.org"
print(id(c) == id(d)) #此处结果为False
C
C有几种存储字符串的情况,例如在栈区(char a[] = "123")、堆区(通过malloc内存,然后将字符串内容拷贝进去)、字符串常量区(
char *a = "123")。前两种情况这里不具体描述了,因为本质上都是变量,和Python有些类似。重点谈一下字符串常量区的情况。
char *s1 = "python.org.123";
char *s2 = "python.org.123";
printf("s1 is %02x\n", s1);
printf("s2 is %02x\n", s2);
打印结果如下所示:
s1 is 46a5794
s2 is 46a5794
Java
Java有两种存储字符串的情况。
一个是在堆区(产生了对象),代码如下所示:
String s1 = new String("python.org.123");
String s2 = new String("python.org.123");
System.out.println(s1 == s2); //结果为false
一个也是在字符串常量区,代码如下所示:
String s3 = "python.org.123";
String s4 = "python.org.123";
System.out.println(s3 == s4); #结果为true
刚才和群里同学交流,Java中Integer也存在小整数缓存的情况。具体来讲就是:
Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1 == i2); #true
但如果是用new,结果就会变化
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1 == i2); #false