Java传递数组和对象值
只是想更好地理解,为什么swapA和swapB在主方法中打印时不更改值,而是通过其自身方法更改值。我以为对象和数组是通过引用传递的,当您交换它时,原始值也会改变?请参见 答案是否定的。Java是按值传递引用的 例如:Java传递数组和对象值,java,arrays,object,Java,Arrays,Object,只是想更好地理解,为什么swapA和swapB在主方法中打印时不更改值,而是通过其自身方法更改值。我以为对象和数组是通过引用传递的,当您交换它时,原始值也会改变?请参见 答案是否定的。Java是按值传递引用的 例如: public static void main(String[] args) { Foo[] foo1 = new Foo[1]; Foo[] foo2 = new Foo[1]; foo1[0] = new Foo(); foo2[0] = new
public static void main(String[] args) {
Foo[] foo1 = new Foo[1];
Foo[] foo2 = new Foo[1];
foo1[0] = new Foo();
foo2[0] = new Foo();
foo1[0].x = 1;
foo2[0].x = 2;
swapA(foo1, foo2);
System.out.println("Swap A " + foo1[0].x + " " + foo2[0].x);
swapB(foo1[0], foo2[0]);
System.out.println("Swap B " + foo1[0].x + " " + foo2[0].x);
swapC(foo1[0], foo2[0]);
System.out.println("Swap C " + foo1[0].x + " " + foo2[0].x);
swapD(foo1, foo2);
System.out.println("Swap D " + foo1[0].x + " " + foo2[0].x);
}
public static void swapA(Foo[] o1, Foo[] o2) {
Foo[] temp;
temp = o1;
o1 = o2;
o2 = temp;
System.out.println("Swap A " + o1[0].x + " " + o2[0].x);
}
public static void swapD(Foo[] o1, Foo[] o2) {
Foo temp;
temp = o1[0];
o1[0] = o2[0];
o2[0] = temp;
System.out.println("Swap D " + o1[0].x + " " + o2[0].x);
}
public static void swapB(Foo o1, Foo o2) {
Foo temp;
temp = o1;
o1 = o2;
o2 = temp;
System.out.println("Swap B " + o1.x + " " + o2.x);
}
public static void swapC(Foo o1, Foo o2) {
int temp;
temp = o1.x;
o1.x = o2.x;
o2.x = temp;
System.out.println("Swap C " + o1.x + " " + o2.x);
}
Swap A 2 1
Swap A 1 2
Swap B 2 1
Swap B 1 2
Swap C 2 1
Swap C 2 1
Swap D 1 2
Swap D 1 2
变量a的“指针”按值传递,并在方法范围内分配给b。更改b将更改b,但不会更改a。请参见
答案是否定的。Java是按值传递引用的
例如:
public static void main(String[] args) {
Foo[] foo1 = new Foo[1];
Foo[] foo2 = new Foo[1];
foo1[0] = new Foo();
foo2[0] = new Foo();
foo1[0].x = 1;
foo2[0].x = 2;
swapA(foo1, foo2);
System.out.println("Swap A " + foo1[0].x + " " + foo2[0].x);
swapB(foo1[0], foo2[0]);
System.out.println("Swap B " + foo1[0].x + " " + foo2[0].x);
swapC(foo1[0], foo2[0]);
System.out.println("Swap C " + foo1[0].x + " " + foo2[0].x);
swapD(foo1, foo2);
System.out.println("Swap D " + foo1[0].x + " " + foo2[0].x);
}
public static void swapA(Foo[] o1, Foo[] o2) {
Foo[] temp;
temp = o1;
o1 = o2;
o2 = temp;
System.out.println("Swap A " + o1[0].x + " " + o2[0].x);
}
public static void swapD(Foo[] o1, Foo[] o2) {
Foo temp;
temp = o1[0];
o1[0] = o2[0];
o2[0] = temp;
System.out.println("Swap D " + o1[0].x + " " + o2[0].x);
}
public static void swapB(Foo o1, Foo o2) {
Foo temp;
temp = o1;
o1 = o2;
o2 = temp;
System.out.println("Swap B " + o1.x + " " + o2.x);
}
public static void swapC(Foo o1, Foo o2) {
int temp;
temp = o1.x;
o1.x = o2.x;
o2.x = temp;
System.out.println("Swap C " + o1.x + " " + o2.x);
}
Swap A 2 1
Swap A 1 2
Swap B 2 1
Swap B 1 2
Swap C 2 1
Swap C 2 1
Swap D 1 2
Swap D 1 2
变量a的“指针”按值传递,并在方法范围内分配给b。更改b将更改b,但不会更改a。JAVA总是按值传递
Java引用是按值传递的。Java总是按值传递
Java引用是按值传递的。按引用传递/按值传递是一个非常烦人的术语 hvgotcodes回答“引用是通过值传递的”是最明显的证据 Java是一致的,请记住两件事: 1) 您始终可以将传入的变量重新分配给任何方法,而不会影响调用方 2) Java不会复制对象,因此如果您有一个给定的实例传递给您,那么修改该实例中的数据将为每个人修改它 顺便说一句,我见过的修改传入值的唯一例子是“swap”,这有点做作,因为它非常简单,编写泛型版本毫无意义
一般来说,修改传递给方法的值是如此罕见和混乱,以至于Java决定不需要它。并不是每个人都认为这是一个好的决定,但不管你是否同意通过引用传递是好的,你必须承认没有它会让你忘记一系列的顾虑(当你调用一个方法时,你的变量永远不会被修改)通过引用传递/通过值传递是一个非常烦人的术语 hvgotcodes回答“引用是通过值传递的”是最明显的证据 Java是一致的,请记住两件事: 1) 您始终可以将传入的变量重新分配给任何方法,而不会影响调用方 2) Java不会复制对象,因此如果您有一个给定的实例传递给您,那么修改该实例中的数据将为每个人修改它 顺便说一句,我见过的修改传入值的唯一例子是“swap”,这有点做作,因为它非常简单,编写泛型版本毫无意义 一般来说,修改传递给方法的值是如此罕见和混乱,以至于Java决定不需要它。并不是每个人都认为这是一个好的决定,但不管你是否同意通过引用传递是好的,你必须承认没有它会让你忘记一系列的顾虑(当你调用一个方法时,你的变量永远不会被修改)请阅读。请阅读。