楼上正确,java参数的确是值传递,包括简单类型和引用类型
1.对于简单类型是值传递这点已经没有什么可疑问的了
2.对于引用类型,有很多人认为是传递引用,这是错误的
说白了是传递引用的拷贝,而不是直接将传递引用
e.g:
class A{
int i = 0;
void toString(){
Systen.out.println("A.i = " + i);
}
}class B{public static void function(A a){
a.i++;//a.i 加1
B b = new B();//实例化B对象
a = b;//将B的引用赋给a
}public static void main(String[] args){
A a = new A();
B.function(a);
a.i++;
System.out.println(a);
}
}
//结果应该是A.i = 2
1.对于简单类型是值传递这点已经没有什么可疑问的了
2.对于引用类型,有很多人认为是传递引用,这是错误的
说白了是传递引用的拷贝,而不是直接将传递引用
e.g:
class A{
int i = 0;
void toString(){
Systen.out.println("A.i = " + i);
}
}class B{public static void function(A a){
a.i++;//a.i 加1
B b = new B();//实例化B对象
a = b;//将B的引用赋给a
}public static void main(String[] args){
A a = new A();
B.function(a);
a.i++;
System.out.println(a);
}
}
//结果应该是A.i = 2
在RMI-IIOP中是对的。
只有原始类型传递是值传递
public Test() {
}
public static void main(String[] args) {
Test test1 = new Test();
//BrickL b = new BrickL();
A a = new A();
B b = new B(); a.print(); b.changeA(a); a.print(); a = new A(10); a.print();
}}
class A
{
public int i = 0;
public A(int in )
{
i = in;
}
public A()
{ } public void print()
{
System.out.println("A.i = " + i);
}
}
class B
{
public void changeA(A a)
{
a.i++;
A newA = new A(10);
a = newA;
}
}
复杂对象还是传值的...to: redlaputa(吾心如秋思,爱随雨后归)
你可以想象成2个遥控器同时控制同1台电视机
^_^
Object o1=new Object();
Object o2=null;o2=o1;o2.change();o2=new Object();
o1还是原先的那个