gpt4 book ai didi

java - java中如何交换整数类型

转载 作者:行者123 更新时间:2023-12-01 11:12:55 25 4
gpt4 key购买 nike

如何更改交换 i,j 的值在swap2()功能:

enter code here public class pass_by_ref {
public static void swap(Integer i, Integer j) //this will not change i j values in main
{
Integer temp = new Integer(i);
i = j;
j = temp;
}
public static void swap2(Integer i, Integer j)
{
i = 20; //as i am setting i value to 20 why isn't it reflected in main and same for j
j = 10;
}
public static void main (String[] args) throws java.lang.Exception
{
Integer i = new Integer(10);
Integer j = new Integer(20);
swap(i, j);
System.out.println("i = " + i + ", j = " + j);
swap2(i, j);
System.out.println("i = " + i + ", j = " + j);
}
}

输出:

        i=10,j=20
i=10,j=20;

我认为Integer i=new Integer(10)创建一个对象i值为 10,所以当我写 i=20;j=10 时在swap2()我正在设置这些值!..那么为什么它不起作用 我知道swap()不会改变i,j值,但为什么不是 swap2()不工作? 那么 swap2() 需要做什么改变?以便交换值。

最佳答案

Java始终按值传递,而Integer是不可变的,您无法更新调用者引用。您可以使用数组(数组中存储的值是可变的)。因为数组是一个对象,所以它的值是通过对数组实例的引用的值传递的,因此您可以修改数组中的值。类似这样的东西,

static void swap(int[] arr, int i, int j) {
// error checking
if (arr == null || i == j) {
return;
}
if (i < 0 || j < 0 || i > arr.length - 1 || j > arr.length - 1) {
return;
}
// looks good, swap the values
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}

然后你可以这样调用它

public static void main(String[] args) {
int[] arr = { 10, 20 };
System.out.println(Arrays.toString(arr));
swap(arr, 0, 1);
System.out.println(Arrays.toString(arr));
}

然后(在输出中)值交换

[10, 20]
[20, 10]

关于java - java中如何交换整数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150594/

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