public class Start { /**
* @param args
*/
public static void main(String[] args) {
Bean bean1 = new Bean("001");
Bean bean2 = new Bean("002"); Start start = new Start();
//Begin
start.exchange(bean1,bean2);
System.out.println(bean1.getId());
System.out.println(bean2.getId());
//End
}
private void exchange(Bean b1,Bean b2) {
Bean bean = b1;
b1 = b2;
b2 = bean;
}}class Bean { private String strId = "";
public Bean() {
//
}
public Bean(String pstrId) {
strId = pstrId;
}
public void setId(String pstrId) {
strId = pstrId;
}
public String getId() {
return strId;
}
}
解决方案 »
- transient是做什么用的??
- 请教 异常 问题???
- hibernate多对多问题(急)
- 请问这个程序错在那里?
- JB 9中代码如何对齐???
- 关于JB不想用自带的JDK1.40,想用自己下载安装的JDK 5.0怎样设置的?详情请进...(给分!)
- 如何熟悉java的API???
- 关于JFormattedTextField
- 还得从新贴~~~都化了500分了
- 讨教方案:现有一个上万行的文本文件,每一行又是几个以逗号分隔的数据块,我需要把他读出来,并且根据数据块内容动态的从中筛选数据,谁能提
- java 作的窗口,要求在同一个窗口中显示不同的panel, 怎么显示不出来呢??在线等候大虾帮忙,谢谢!!
- tomcat 连接池的一个超级bug!!!
002
如果你不调用change方法,而是把change方法里的代码移植到main方法中就是002 001了
java中,对象都是传地址的
所以你这里 exchange(Bean b1,Bean b2)
只是传了b1,b2的对象的内存地址进方法exchange中
不管在方法内怎么改对象的地址
在方法外的b1,b2的地址是没变的
当然如果你在方法中改b1,b2对象的状态,在方法外是可见的又或者简单的说b1和bean1,b2和bean2的内存地址是一样的
你在方法内改变b1和b2对象的地址又怎么了,bean1,bean2的地址都是一样,从来没变
你改了copy,对原值没影响
你应该把它改成如下才能完成交换:
private void exchange(Bean b1,Bean b2) {
String tmp = b1.getId();
b1.setId(b2.getId());
b2.setId(tmp);
}
Bean bean1 = new Bean("001");
Bean bean2 = new Bean("002");
//这是第二次初始化,就是说, main执行了两次,bean1,bean2分别都有两个,然后exchange函数,使新的bean1,bean2的指针交换了指向,但是,最后输出的值,还是旧的bean1,bean2,所以是001,002
002
说明:
在java中方法参数有两种类型:
1)基本数据类型(数字)
2)对象引用
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。
java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是值传递。
注意:”对象引用“与“引用调用”是不同的。
总结:
1)一个方法不能修改一个基本数据类型的参数
2)一个方法可以改变一个对象参数的状态
3)一个方法不能让对象参数引用一个新的对象
exchange(bean1,bean2)exchang:
相当于:Bean b1 = main.bean1;
Bean b2 = main.bean2; b1、b2交换,当然不干main.bean1、main.bean2的事了,他们俩指向的对象没有变化/
002
001
2)对象的引用是传值传递,对于对象的引用的赋值只是在操作拷贝,并不影响原来那个引用,所以在exchange中b1=b2,只是操作b1的拷贝,所以答案是001,002
java.lang.Error: Unresolved compilation problems:
bean1.bean2 cannot be resolved or is not a field
Syntax error on token "Invalid Character", . expected at Start.main(Start.java:14)
Exception in thread "main"
start.exchange(bean1,bean2);这句错