关于交换两个Integer类型的值

当时没想那么多,觉得加个中间变量就可以交换
 public static void swap(Integer i, Integer j) {
        Integer temp = new Integer(i);
        i = j;
        j = temp;
    }

    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        Integer i = new Integer(10);
        Integer j = new Integer(20);
        swap(i, j);
        System.out.println("i = " + i + ", j = " + j);
    }

然而运行起来了才发现根本没有变化 

Java 中有两种参数传递

  • 值传递

    方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。

  • 引用传递

    也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

可是 Integer 不就是 引用类型?

为什么不能改变呢?

查看源码

这个属性也是表示这个 Integer 实际的值,但是他是 private final 的,Integer 的 API 也没有提供给外部任何可以修改它的值接口,也就是说这个值改变不了。

简单理解就是上面的 swap 方法其实真实交换的是 两个形参 i 和 j 的值,而没有去改变 mian方法 i 和 j 的值

接下来就是考虑反射 目前学校学的忘了 我先去复习下 回来接着写

在不同的编程语言中,使用函数交换两个的实现方法有所不同,以下分别介绍 C 语言Java 的实现方式: ### C 语言 在 C 语言中,要实现函数交换两个变量的,需要使用指针,因为函数调用中数据传递是单向的,使用指针可以直接操作变量的内存地址。示例代码如下: ```c #include <stdio.h> // 定义交换函数 void change(int* a, int* b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int a = 1; int b = 2; printf("交换前: %d %d\n", a, b); change(&a, &b); printf("交换后: %d %d\n", a, b); return 0; } ``` 在上述代码中,`change` 函数接收两个 `int` 类型的指针作为参数,通过指针操作交换两个变量的。 ### Java Java 函数在传递过程中只能够传,不能传址,函数的参数在函数内部做任何变化都不会反映到外部调用者。对于普通的类型,如 `int` 或 `double`,可以改传它们的包装类 `Integer` 和 `Double`;对于本来就是引用类型的对象,则需要对它们再包一层,可将参数列表改成数组。示例代码如下: ```java public class SwapExample { public static void swap(int[] arr) { int temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } public static void main(String[] args) { int[] numbers = {1, 2}; System.out.println("交换前: " + numbers[0] + " " + numbers[1]); swap(numbers); System.out.println("交换后: " + numbers[0] + " " + numbers[1]); } } ``` 在上述代码中,`swap` 函数接收一个 `int` 类型的数组作为参数,通过数组元素的交换实现两个交换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值