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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值