gpt4 book ai didi

java - 用程序理解java中的交换函数

转载 作者:行者123 更新时间:2023-12-01 20:14:29 24 4
gpt4 key购买 nike

正如我在网上读到的,Java 是按值传递的,一般的交换函数不会交换两个值。我还读到不可能交换原始类型的值。我想知道为什么下面的程序可以工作并在交换后显示不同的值?

public class swapMe {

public static void main(String[] args) {
int x = 10 , y = 20;

System.out.println("Before");
System.out.println("First number = " + x);
System.out.println("Second number = " + y);

int temp = x;
x = y;
y = temp;

System.out.println("After");
System.out.println("First number = " + x);
System.out.println("Second number = " + y);
}
}

是否就像在某个地方,x = 10y = 20 的原始值仍然存储在某处,并且显示的交换值不正确?请指教。谢谢

最佳答案

完全确定您从哪里获得该信息,但让我们一次了解这一信息。

As I have read online that Java is pass by value and a general swap function won't swap the two values.

正确...如果期望通过调用方法来实现交换。

 public void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
}

// meanwhile, in main
int x = 10;
int y = 20;
swap(x, y);
System.out.println(x); // still prints 10
System.out.println(y); // still prints 20

不正确...如果交换发生在方法内并且以某种方式被利用。

 public void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println(x); // will print 20 from main
System.out.println(y); // will print 10 from main
}

// meanwhile, in main
int x = 10;
int y = 20;
swap(x, y);
System.out.println(x); // still prints 10
System.out.println(y); // still prints 20

I also read that it's not possible to swap the values of primitive types.

不,这是完全可能做到的。您始终可以重新分配变量。

至于为什么你上面的例子有效,这是因为你在重新分配其中一个变量时保留了其中一个值。当您复制一个值时,您基本上将其放在一边。

慢慢地...

int x = 10;
int y = 20;
int tmp = x; // tmp = 10
x = y; // x = 20, tmp = 10
y = tmp; x = 20, y = 10; tmp = 10 (but that doesn't matter)

关于java - 用程序理解java中的交换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46158629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com