JAVA的传参数有的时候自己感觉很是奇怪,今天特地写了几个程序验证一下,发现也没有原来自己想象中的这么难,原来JAVA传的只是引用,如果是普通数据类型的话就像C中的值传递
/**
*
*/
package infon.test;

/**
* @author infon 2007-6-1
*/
public class TestArg {

static void modifyBean(Bean bean) {
bean.set_arg(11111);
}

static void modifyString(String s) {
s = "ssssssssss";
}

static void modifySB(StringBuffer sb) {
sb.append("sbsbsbsbsbsbsbsb");
}

static void modifyInt(int i) {
i =111111;
}

static void modifyInteger(Integer integer) {
integer = Integer.valueOf(1111111);
}

public static void main(String[] args) {

Bean bean = new Bean();
System.out.println("Bean修改前 _arg的值:" + bean.get_arg());
modifyBean(bean);
System.out.println("Bean修改后 _arg的值:" + bean.get_arg());

String s = "00000";
System.out.println("String修改前的值:" + s);
modifyString(s);
System.out.println("String修改后的值:" + s);

StringBuffer sb = new StringBuffer("000");
System.out.println("StringBuffer修改前的值:" + sb.toString());
modifySB(sb);
System.out.println("StringBuffer修改后的值:" + sb.toString());

int i = 0;
System.out.println("int修改前的值:" + i);
modifyInt(i);
System.out.println("int修改后的值:" + i);

Integer integer = new Integer(0);
System.out.println("Integer修改前的值:" + integer);
modifyInteger(integer);
System.out.println("Integer修改后的值:" + integer);
}
}

class Bean {
private int _arg = 0;

public int get_arg() {
return _arg;
}

public void set_arg(int _arg) {
this._arg = _arg;
}
}
输出的结果如下:
Bean修改前 _arg的值:0
Bean修改后 _arg的值:11111
String修改前的值:00000
String修改后的值:00000
StringBuffer修改前的值:000
StringBuffer修改后的值:000sbsbsbsbsbsbsbsb
int修改前的值:0
int修改后的值:0
Integer修改前的值:0
Integer修改后的值:0
----------------------------------------------------
从上面我可以得知,在传递对象的时候,传进去的是引用地址,如Bean 与 StringBuffer,在修改时也是修改他们的内容,当然String与Integer也是一样,但String与Integer在修改的时候创建了另一个对象,而原来的s 与 integer这两个变量根本就不是指向原来的地址
s = "ssssssssss";
integer = Integer.valueOf(1111111);
都是创建了一个新的对象的!
而基本数据类型int传的应该就是值,但也有可能用Iteger这个包装类进行包装后的地址,这个无从知道
但现在基本上已经摸清楚了JAVA的传参数应该注意的地方,如我在前面做EDI项目的时候,我传进去的是一个Jdom的Element对其进行增删改处理,这显然是一个对象,不用返回Element也可以,因为其传的只是一个引用,Element虽然已经修改了,但地址没有变,引用没有变就可以了。







































































输出的结果如下:
Bean修改前 _arg的值:0
Bean修改后 _arg的值:11111
String修改前的值:00000
String修改后的值:00000
StringBuffer修改前的值:000
StringBuffer修改后的值:000sbsbsbsbsbsbsbsb
int修改前的值:0
int修改后的值:0
Integer修改前的值:0
Integer修改后的值:0
----------------------------------------------------
从上面我可以得知,在传递对象的时候,传进去的是引用地址,如Bean 与 StringBuffer,在修改时也是修改他们的内容,当然String与Integer也是一样,但String与Integer在修改的时候创建了另一个对象,而原来的s 与 integer这两个变量根本就不是指向原来的地址
s = "ssssssssss";
integer = Integer.valueOf(1111111);
都是创建了一个新的对象的!
而基本数据类型int传的应该就是值,但也有可能用Iteger这个包装类进行包装后的地址,这个无从知道
但现在基本上已经摸清楚了JAVA的传参数应该注意的地方,如我在前面做EDI项目的时候,我传进去的是一个Jdom的Element对其进行增删改处理,这显然是一个对象,不用返回Element也可以,因为其传的只是一个引用,Element虽然已经修改了,但地址没有变,引用没有变就可以了。