正在回答 回答被采纳积分+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 星