欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

java python 运行 内存_Python C Java中字符串在内存中的存储

发布时间:2023/12/10 57 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java python 运行 内存_Python C Java中字符串在内存中的存储 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

总结

以上是生活随笔为你收集整理的java python 运行 内存_Python C Java中字符串在内存中的存储的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。