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