java python 运行 内存_Python C Java中字符串在内存中的存储
Python
昨天在講Python的過程中,發(fā)現(xiàn)了一個小問題,當(dāng)時課上沒有解決,下面特意查閱資料解決了一下。
a = "123"
b = "123"
print(id(a) == id(b)) #此處結(jié)果為True,也可以寫成print(a is b)
c = "python.org"
d = "python.org"
print(id(c) == id(d)) #此處結(jié)果為False
C
C有幾種存儲字符串的情況,例如在棧區(qū)(char a[] = "123")、堆區(qū)(通過malloc內(nèi)存,然后將字符串內(nèi)容拷貝進(jìn)去)、字符串常量區(qū)(
char *a = "123")。前兩種情況這里不具體描述了,因?yàn)楸举|(zhì)上都是變量,和Python有些類似。重點(diǎn)談一下字符串常量區(qū)的情況。
char *s1 = "python.org.123";
char *s2 = "python.org.123";
printf("s1 is %02x\n", s1);
printf("s2 is %02x\n", s2);
打印結(jié)果如下所示:
s1 is 46a5794
s2 is 46a5794
Java
Java有兩種存儲字符串的情況。
一個是在堆區(qū)(產(chǎn)生了對象),代碼如下所示:
String s1 = new String("python.org.123");
String s2 = new String("python.org.123");
System.out.println(s1 == s2); //結(jié)果為false
一個也是在字符串常量區(qū),代碼如下所示:
String s3 = "python.org.123";
String s4 = "python.org.123";
System.out.println(s3 == s4); #結(jié)果為true
剛才和群里同學(xué)交流,Java中Integer也存在小整數(shù)緩存的情況。具體來講就是:
Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1 == i2); #true
但如果是用new,結(jié)果就會變化
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1 == i2); #false
總結(jié)
以上是生活随笔為你收集整理的java python 运行 内存_Python C Java中字符串在内存中的存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vb MySQL 导出_将vb中数据库的
- 下一篇: Asp.Net页面传值的方法简单总结【原