Java 对于String内存分析

String类在内存分析(编译期,运行期)

定义在堆的常量池中,栈中地址指向常量池中地址

String a = "小白猫";

如果常量池中有值,则在堆中new个地址指向常量池中值,栈中地址指向堆中new的地址,如果没有,则在堆的常量池中定义这个值,并且堆中new个地址指向常量池中值,栈中地址指向堆中new的地址

String b = new String("小白猫");

这个时候a和b不是指向同一个内存地址

定义在堆的常量池中,栈中地址指向常量池中地址

String c = "小白猫";

这个时候a和c是指向同一个内存地址

String a = "小白猫";
//这a是一个变量,只有在运行期才能确定,在编译期无法确定,所以在堆中创建了新的对象
String a1 = a+1;
//在堆的常量池中创建了新的对象
String a2 = "小白猫1";
//所以指向的不是同一个对象

final String a = "小白猫";
//这a不是一个变量,在编译期可以确定,所以在堆的常量池中创建了新的对象
String a1 = a+1;
//在堆的常量池中引用了对象
String a2 = "小白猫1";
//所以指向的是同一个对象
 
String getString(){
    return "小白猫";
}
final String a = getString();
//这a加不加final都是一个变量,在编译期无法确定,所以在堆中创建了新的对象
String a1 = a+1;
//在堆的常量池中引用了对象
String a2 = "小白猫1";
//所以指向的不是同一个对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值