正在回答 回答被采纳积分+1
你好!不是哪些类执行了值传递,要看具体的方法参数和在方法内做了什么。
基本数据类型如int等,作为方法参数,在方法内对参数的改变是不影响主方法中的变量的。
如果是引用数据类型,比如数组,在方法中对数组的值进行改变,会影响到主方法中的数组。
类也属于引用数据类型,对于类作为参数,如果你去改变对象的属性值,在主方法中是可以看到改变的。如下代码和运行效果所示。
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积分~
来为老师/同学的回答评分吧
0 星