Java的内存分配机制

文章详细解释了Java中创建对象的内存过程以及String常量池的使用,通过实例展示了`s1`和`s2`与`s3`和`s4`在内存中的不同行为,重点讲解了equals()和`==`操作符的区别。
摘要由CSDN通过智能技术生成


总构造图

​​​​​​在这里插入图片描述


一、创建一个对象的内存过程

在这里插入图片描述


二、引用String常量

仔细体会s1、s2和s3、s4之间的区别:

public class Example9_1 {
     public static void main(String args[]) {
         String s1,s2;
         s1=new String("we are students");
         s2=new String("we are students");
         System.out.println(s1.equals(s2));  //输出结果是:true
         System.out.println(s1==s2);         //输出结果是:false

         String s3,s4; 
         s3="how are you";
         s4="how are you"; 
         System.out.println(s3.equals(s4));  //输出结果是:true
         System.out.println(s3==s4);         //输出结果是:true 
    }
}

注意:
s1 == s2 判断的是两参数的地址是否相等;
s1.equals(s2) 判断的是字符串内容是否相同。

equals(String s)方法用于比较当前String对象的字符序列是否与参数s指定的String对象的字符序列相同。

——
【揭秘】

s1和s2先new后赋字符串,故s1、s2有各自的地址,
再分别将"we are students"存入它们的地址。
因此输出结果为true false

s3和s4直接赋字符串,故先把字符串"how are you"放入常量池分配地址,然后s3、s4再对"how are you"的地址进行引用。
因此输出结果为true true


本文仅自用,部分图片来源于b站@黑马程序员
如能帮到你,不胜荣幸

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值