怎么理解对象引用是通过值传递的? 你可以这样想:Java里的对象实际上是一个指针,参数传递的是地址,所以你修改指针指向的内容(obj->name)会保留下来。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Java里的对象实际上是一个指针,参数传递的是地址?可书上说JAVA里只有按值传递,不存在按地址传递啊,我试了下面的程序,如果是对象是一个指针,那么下面的程序为什么不能改变对象状态啊?:public class testswap{ public static void main(String[] args) { username name1=new username("hnsoso1"); username name2=new username("hnsoso2"); swap(name1,name2); System.out.println("更改后name1的name为:"+name1.getName()); System.out.println("更改后name2的name为:"+name2.getName()); } public static void swap(Object x,Object y) { Object temp=x; x=y; y=temp; }} class username{ public username(String n) { this.name=n; } public String getName() { return name; } private String name;};运行结果:更改后name1的name为:hnsoso1更改后name2的name为:hnsoso2结果没有达到预期目标--------------------糊涂了?????其实我还想知道方法中修改对象参数的状态是怎么实现的 既然你都说了,对象的引用是通过值传递的就上面的程序来说,如果你想达到换名的目的swap方法里面就不能应用两个对象,而是这两个对象的值--hnsoso1和hnsoso2也就是public void swap(Stirng s,String y) 我个人对上面的程序是这样看的:你传把NAME1,NAME2两个对象名做为参数调用了SWAP方法,那也是值传递,但SWAP的形参与调用SWAP方法的实参虽然是两个不同的参数,但两个对象的指向的属性地址是一样的,也就是说OBJECT X与NAME1里面的USERNAME1属性的地址是同一个,但OBJECT X与NAME1两个对象的地址却是分开的。所以这样你在SWAP方法体中交换了OBJECT X与OBJECT Y并不会对NAME1与NAME2产生影响。 对象引用是通过值来传递的方法不能修改基本类型(数字或布尔)的参数方法可以修改对象的参数状态方法不能让对象参数指向新的对象(所以swap方法没有达到预期目的) 十人九错的问题,脑筋急转弯的java package 命名的bug? 请问JDK 1.5和J2EE 1.4 sdk两个有什么区别?还是互相包含? object和object数组什么联系和区别? 问个简单的问题,同一个包中的类之间的访问权! 我该怎样用jdk1.5啊??? 代码是对的,但就是编译通不过,谁能告诉我该怎么弄? 菜鸟问题! java有没有"析构"函数呢? 继续讨论~! 谁能介绍几本关于applet编写的书,和站点。谢谢! JDBC的问题 如何把byte[]里面的每个byte放入到Stack中!!
{
public static void main(String[] args)
{
username name1=new username("hnsoso1");
username name2=new username("hnsoso2");
swap(name1,name2);
System.out.println("更改后name1的name为:"+name1.getName());
System.out.println("更改后name2的name为:"+name2.getName());
}
public static void swap(Object x,Object y)
{
Object temp=x;
x=y;
y=temp;
}
}
class username
{
public username(String n)
{
this.name=n;
}
public String getName()
{
return name;
}
private String name;
};
运行结果:
更改后name1的name为:hnsoso1
更改后name2的name为:hnsoso2
结果没有达到预期目标--------------------
糊涂了?????其实我还想知道方法中修改对象参数的状态是怎么实现的
就上面的程序来说,如果你想达到换名的目的
swap方法里面就不能应用两个对象,而是这两个对象的值--hnsoso1和hnsoso2
也就是public void swap(Stirng s,String y)
方法可以修改对象的参数状态
方法不能让对象参数指向新的对象(所以swap方法没有达到预期目的)