关于常量池,和地址
String s1='imooc'
s1="hello "+s1;
那么常量池中是不是有两个值,‘imooc’和‘hello imooc’,那么现在s1的地址没有改变,而他的常量池中的值变成了‘hello imooc’,imooc这个值是否还在变量池内,是的话后面需要清理常量池吗?还是就这样留在常量池内
正在回答
常量池中没有两个字符串,因为"hello mooc"是你用"hello "和s1拼接起来的,其中s1是变量所以不会放在常量池里。另外str自己的地址没有改变,但是str指向的地址发生了改变,本来是指向"imooc"的,现在指向了"hello imooc"了。后面'imooc"会被清理。
请采纳!
基本数据类型当你定义变量时,就相当于给一个盒子起了一个名字(int age;)然后当你给变量赋值时相当于把一个东西装在了箱子里(age = 10;),那么你知道盒子的名字以后就可以使用了,比如打开盒子看看里面的东西,或者换一个其他东西装进去。
引用数据类型也一样,当你定义一个变量时也相当于给一个盒子起了一个名字(String name;)然后当你给变量赋值时有了困难,就目前你知道的两种引用类型来看一个数组,一个字符串。你会发现这两个和基本数据类型不同,他们的大小不确定,数组可大可小,字符串可长可短。
那我的盒子应该买多大的呢?买小了装不下,买大了浪费。只要是固定的大小都有问题,而基本数据类型是固定大小的盒子,这也是为什么各种基本数据类型有最大值最小值的原因因为盒子大小是固定的。所以在你盒子里装的并不是东西本身,而是一张藏宝图。于是当你赋值给引用型变量时总是要先 new String("你好");这就是去找一个足够装的下宝藏的地方,放进去东西然后把位置装进盒子(引用变量)里。
所以当你通过方法传参时,相当于别人有了和你盒子里一样的东西,大家都有一份(因为计算机里都是信息嘛,不会你有了我就没有,大家信息都一样了)。因此无论是传基础还是引用别人修改他盒子里的信息你都不会有影响。
唯一有影响的是如果别人是通过藏宝图去把宝藏给修改了,那你就会有影响,因为是指向同一份宝藏的位置。而你第三个问题里只是别人换了一张藏宝图,一开始是装“1’宝藏现在是指向装“2”的宝藏,于你自己而言是依然是装“1”的宝藏。
如能理解,请采纳!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星