7.4两种实例化方式比较

1、分析直接赋值的对象实例化模式

在这里插入图片描述
在内存中开辟一块堆内存,而且对于同一字符串的多次赋值还可以实现对堆内存空间的重用。既:在内容相同的情况下不会开辟新的堆内存空间,而会直接指向已有的堆内存空间
范例:观察直接赋值时的堆内存直接引用

public class StringDemo137 {
        public static void main(String[] args) {
			String strA="LLL";     //直接赋值实例化
			String strB="LLL";      //直接赋值实例化
			String strC="KKK";        //直接赋值实例化,内容不相同
			System.out.println(strA==strB);
			System.out.println(strA==strC);
			
			
		}
} 
true
false

内容一样:指向同一堆内存空间;
内容不一样:则会自动开辟新的内存空间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
字符串常量池
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
共享设计模式,用完存在常量池中,下次用直接拿

2、分析构造方法实例化

在这里插入图片描述
使用构造方法的实例化,实际上会开辟两块空间,其中一块将成为垃圾,由于new表示开辟新的堆内存空间,所以内容不会保存在对象池中
范例:构造方法实例化String类对象不自动入池保存

public class StringDemo139 {
        public static void main(String[] args) {
			String strA=new String("lll");
			String strB="lll";
			System.out.println(strA==strB);
		}
}

false

如果希望新开辟的新内存数据也能进入对象池保存,那么可以进行aString类定义的一个手动入池方法
手动保存到对象池:public String intern();
范例:String类对象手动入池


public class StringDemo139 {
        public static void main(String[] args) {
			String strA=new String("lll").intern();
			String strB="lll";
			System.out.println(strA==strB);
		}
}

true

两种String类对象实例化区别
直接赋值:只会开辟一块堆内存空间,并且会自动保存在对象池中以供下次重复使用
构造方法:会开辟两块堆内存空间,其中有一块将成为垃圾,并且不会自动入池,但是用户可以使用intern()
方法手动入池。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值