java:string类的内存分析


public class str韩 {
    public static void main(String[] args) {
        String name="lxl";
        //字符串字符使用的是unicode编码,一个字符占二个字节(汉字和英文)
        name="ee";
        System.out.println(name );
        //【2】string常用的构造器
       /* String s1=new String();
        String s2=new String();
        */
        //private final byte[] value;
        final char[] v={'a','b','c'}; //不可变
        char [] v1={'l','x','l'};  //地址可变
        char [] v2={'z','m','g'};  //可变
        v[0]='A';
        v1=v2;
        //v=v1;
        System.out.println(v1);
        //[3] new出来的对象在堆里
       /*s3位于栈里面,他在方法区的常量池里面看看有没有这个字符串,没有的话,
         直接创建了一个地址为0x99的字符串lxl
        */
        String s3="lxl";//直接赋值 s3指向的是常量池里的“lxl”
        String s5="lxl";
        //s4位于堆,在常量池里发现有一个lxl的字符串,然后指向0x99
        //---s4指向的是堆中对象 ,然后堆中对象指向的是
        String s4=new String("lxl");//调用构造器

        System.out.println(s3==s5); //t
        System.out.println(s3==s4); //f
        System.out.println("s3.equals(s4):"+s3.equals(s4));//equals比较的是具体的值
        System.out.println(s3==s5.intern());
        /* s4指向的是堆 ,s5.intern()指向的是常量池中的字符串地址   */
        System.out.println(s4==s4.intern());
        System.out.println(s3.intern());

        String a="java";
        String b="java";//a,b指向的是常量池中存储“java”字符串的地址
        System.out.println("a==b:"+a==b);

        int a1=1;
        int b1=1;
        System.out.print("a1==b1:");
        System.out.println(a1==b1);

        String x=new String("xyz");
        String y=new String("xyz");
        System.out.println("x==y:"+(x==y));//F

        Person p1=new Person();
        Person p2=new Person();
        p1.name="me";
        p2.name="me";
        //p1.name和p2.name指向堆,然后再指向常量池中字符串的地址
        System.out.println("p1.name==p2.name:"+(p1.name==p2.name));//T
        //"me"指的也是字符串常量池中的地址
        System.out.println("p1.name==me:"+(p1.name=="me"));//T

//        Integer a=12;
//        Integer b=12;
//        System.out.println(a==b);
//        System.out.println(a.equals(b));

    }

    static class Person{
        String name;
        void Person(){

        }
    }
}

运行结果:
在这里插入图片描述
内存分析图
在这里插入图片描述
在这里插入图片描述
相关衔接:https://www.bilibili.com/video/BV1fh411y7R8?p=469&spm_id_from=pageDriver

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值