Java基础(1)--Java内存区域放的都是啥?

最近刷题总会遇到这种:

String a = “str”;
String b = "ing";
String c = a+b;
String d = "str"+"ing";
String e = new String("string");
System.out.println(c==d);
System.out.println(c==e);//地址不同,内容相同
System.out.println(d==e);

运行后的结果是:

false
false
false

首先,“==”和没有被覆盖的equals()方法:基本类型比较的是值,其他类型比较的是地址
覆盖的equals()方法:比较的都是值,不管基本类型还是其他类型
**被equals()覆盖的方法需要补充
注意:“’= =”一边是包装类型一边是基本类型,先将包装类转为基本类型,这时比较的是值。

栈中(数据共享)

1、前提条件:以下基本类型是局部变量int, short, long, byte, float, double, boolean, char基本类型的地址和内容
2、对象的引用地址,属于成员变量的基本类型地址名

堆中

1、数组
2、对象实例new出来的
3、属于成员变量的基本类型的值

常量池(数据共享)

1、String a=”a”字符串
2、final常量值
3、特殊地String a=”str”;String b=”ing”;String c=”str”+”ing”;这个c位于常量池中
4、特殊地String a=”str”;String b=”ing”;string c=a+b;这个c内容就位于常量池(还是在堆???后面接着补)中,但c的地址在栈中

特殊情况

String str=new String("abc");
常量池里有一个"abc"
堆里有一个"abc"
还有一个引用str栈中

String str1=new String();
只有一个对象堆中
一个引用str1栈中

引用类型赋值操作时:

   float f1[]=new float[2];
   float[] f2=f1;

这时f1的引用地址会在栈中,真正的值在堆中;通过赋值操作,f2和f1的引用地址相同,这时修改f2的值,f1的值也会变,所以f1==f2。

2020.4.11初稿
2020.4.15修一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值