关于java中String的一些思考总结

1.String a = "abc";//在字符串池(在栈中)里创建一个常量字符串"abc"的对象,把在栈中的地址赋给引用a,a保存的是对象的栈中地址;
2.String a1 = new String("abc");// 两个操作:1).在字符串池中看是否有值为"abc"的对象,无则在池中创建一个对象,有则返回该地址,2). 在堆中创建一个对象
3.String a2 = "abc"+"def";//如果池中有"abc"和"def"及连接后的"abcdef"则返回"abcdef"对象在字符串池(栈中)的地址,没有则在池中创建,哪个对象没有则在池中创建该对象;
4.String a3 = "abc" + a;//如果+号左右两边有变量则在堆中创建一个对象,它的值是两个字串连接后的字符串,返回的是该对象在堆中的位置;
5."=="比较的是引用(内存地址)绝对同一个对象,可以是不同的引用;"equal"比较的是它们的值;

6.下列输出值
Java代码
String hello = "hello";
String hel = "hel";
String lo = "lo";
final String lo1 = "lo";
System.out.println(hello == "hel" + "lo"); // true,hello是String字符池中常量对象"hello"的地址,"hel" + "lo"返回的是字符池中"hello"的地址(若"hello"在字符池中存在返回字符池中的地址,没有则在字符串中创建一个常量对象再返回),
System.out.println(hello == "hel" + lo); false// hello是字符池中的对象引用(栈中),"hel" + lo返回堆中新对象的地址,值为该字符串拼接后的值,只要出现+号和变量都会在堆中创建新对象;
System.out.println(hello == "hel" + lo1); true// 变量前加了final,jvm会自动在String的字符池中找这个对象,有则返回该字符串在池中的地址
7.关于java函数中参数传值的问题:(值传递)
结论:
1).对于基本类型变量,包括char、byte、short、int、long、float、double、boolean
在栈中对基本类型变量做了一份拷贝,函数只是操作栈中的拷贝,并不会改变原有变量的值。

2).对于引用类型,包括类、接口、数组(基本类型数组和对象数组)。
在栈中对引用也做了一份拷贝,指向同一个堆中的地址,方法体内对参数所指向对象的属 性进行运算,会改变原有变量所指向对象的属性值,因为大家同指向一个对象的地址,操作同一个对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值