new String("abc")和String h = "abc"的区别,还有创建了几个对象了

String a = new String("abc");
        String b = new String("abc");
        String c = new String("bbc");
        String h = "bbc";
        String d = "bbcc";
        String e = "bbcc";
        String f = "bbcc";
        String g = "bbccffff";

        if (a == b)
            System.out.println("a等于b");
        else
            System.out.println("a不等b");
        if (a.equals(b))
            System.out.println("a等于b");
        else
            System.out.println("a不等b");
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        if (c == h)
            System.out.println("c等于h");
        else
            System.out.println("c不等h");
        
        if (d == e)
            System.out.println("d等于e");
        else
            System.out.println("d不等e");
        if (f == g)
            System.out.println("f等于g");
        else
            System.out.println("f不等g");

 

结果:a不等b
a等于b
abc
abc
bbc
bbcc
c不等h
d等于e
f不等g

 

菜鸟分析:

原来说创建几个对象的,和左边的变量一点关系都没有…,new String ("abc")会直接在堆中占用一块内存,再次new String ("abc")还会占用一块堆内存,但是指向同一个方法区的字符串池;

所以说new String ("abc")会生成1(2)个对象,一个是堆里边new出来的对象,另外一个是方法区的字符串池“abc”,原来有就引用,没有就新建;

而  String str = "abc",是直接去方法区的字符串池里找有没有“abc”,有则引用,没有则新建,都不经过堆这边…

 

“==”和“equals”的区别傻傻分不清

“==” 对于基础数据类型 比较的是值,对于引用数据类型 比较的是地址

“equals” 默认比较的是内存地址,String类是重写了“equals”,所以String比较的是值

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值