【详识JAVA语言】交换两个整型变量

简介: 【详识JAVA语言】交换两个整型变量

交换两个整型变量

错误示例

public class TestMethod { 
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b); 
System.out.println("main: a = " + a + " b = " + b);
}
public static void swap(int x, int y) { 
int tmp = x;
x = y;
y = tmp;
System.out.println("swap: x = " + x + " y = " + y);
}
}
// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20

可以看到,在swap函数交换之后,形参x和y的值发生了改变,但是main方法中a和b还是交换之前的值,即没有交 换成功。

原因分析

实参a和b是main方法中的两个变量,其空间在main方法的栈(一块特殊的内存空间)中,而形参x和y是swap方法中 的两个变量,x和y的空间在swap方法运行时的栈中,因此:实参a和b 与 形参x和y是两个没有任何关联性的变量, 在swap方法调用时,只是将实参a和b中的值拷贝了一份传递给了形参x和y,因此对形参x和y操作不会对实参a和b 产生任何影响。

注意:对于基础类型来说, 形参相当于实参的拷贝. 即 传值调用

int a = 10;
int b = 20;
int x = a;
int y = b;
int tmp = x;
x = y;
y = tmp;

可以看到, 对 x 和 y 的修改, 不影响 a 和 b.

解决办法

传引用类型参数 (例如数组来解决这个问题)

public class TestMethod {
public static void main(String[] args) { 
int[] arr = {10, 20}; 
swap(arr); 
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]); }
public static void swap(int[] arr) { 
int tmp = arr[0]; 
arr[0] = arr[1]; 
arr[1] = tmp; 
}
}
// 运行结果 
arr[0] = 20 arr[1] = 10
相关文章
|
6天前
|
Java
阅览室(Java语言)
阅览室(Java语言)
10 2
|
6天前
|
Java
PTA帅到没朋友(Java语言)+测试点
PTA帅到没朋友(Java语言)+测试点
12 1
|
6天前
|
机器学习/深度学习 算法 Java
全排列(分治)(Java语言 +全排列模板)
全排列(分治)(Java语言 +全排列模板)
11 2
|
6天前
|
Java
阶乘末尾0的个数(Java语言+思路优化)
阶乘末尾0的个数(Java语言+思路优化)
8 1
|
6天前
|
Java C++
社交集群(pta) (并查集) Java语言
社交集群(pta) (并查集) Java语言
13 3
|
6天前
|
存储 Java
ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
11 1
|
6天前
|
Java
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
13 4
|
6天前
|
Java C++
PTA 小字辈(Java语言)
PTA 小字辈(Java语言)
10 1
|
6天前
|
Java
PTA 求前缀表达式的值 (Java语言,踩了全部坑)
PTA 求前缀表达式的值 (Java语言,踩了全部坑)
10 4
|
6天前
|
Java
Consecutive Factors 连续因素(Java语言)
Consecutive Factors 连续因素(Java语言)
8 2