正在回答 回答被采纳积分+1
你好!不是哪些类执行了值传递,要看具体的方法参数和在方法内做了什么。
基本数据类型如int等,作为方法参数,在方法内对参数的改变是不影响主方法中的变量的。
如果是引用数据类型,比如数组,在方法中对数组的值进行改变,会影响到主方法中的数组。
类也属于引用数据类型,对于类作为参数,如果你去改变对象的属性值,在主方法中是可以看到改变的。如下代码和运行效果所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | class Cat { private String name; private String age; public Cat(String name, String age) { super (); this .name = name; this .age = age; } public String getName() { return name; } public void setName(String name) { this .name = name; } public String getAge() { return age; } public void setAge(String age) { this .age = age; } @Override public String toString() { return "Cat [name=" + name + ", age=" + age + "]" ; } } public class Demo { public void change(Cat cat) { cat.setName( "huahua1" ); } public static void main(String[] args) { Cat cat= new Cat( "huahua" , "1 month" ); System.out.println( "name:" +cat.getName()); Demo demo= new Demo(); demo.change(cat); System.out.println( "name:" +cat.getName()); } } |
运行效果:
祝学习愉快!
您好,执行Integer x=400;这段代码会创建一个Integer对象,x的引用指向它;执行Integer y = x;这段代码,y的引用和x的引用指向了同一片内存空间。这时,x和y指向同一个对象。之后,执行x++,将会创建一个新的Integer对象401,然后x的引用指向新创建的对象。这时x和y不再指向同一个对象。执行x==y得到结果为false;
执行StringBuilder sb1 = new StringBuilder("123");这段代码时,在堆中生成一个StringBulider对象,内容为:123,这时有一个sb1的引用指向"123"这个内容。执行StringBuilder sb2 = sb1;这段代码,sb2的引用同样指向"123"这个内容。在执行sb1.append("5");时,会在内存中"123"这个位置变成 了"1235",这时没有在内存当中生成新的对象,也没有新的字符串常量,而是在原来的基础上进行了修改。sb1和sb2指向的是同一个对象,所以执行sb1==sb2得到结果为true。
祝学习愉快!
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧