【Java】Swap实现
扫盲:Java中只有值传递
我们都知道,在C/C++中,进行值交换的方法:
void swap(int &a, int &b)
{
int t = a;
a = b;
b = t;
}
Java参数的值传递
调用方法时,需要提供实参,实参必须与形参的次序相同,称为参数顺序匹配。实参必须与方法签名中的形参在次序上和数量上匹配,在类型上兼容,兼容的意思是不需要显性声明类型转换,即类型相同或者类型转换为拓宽类型。
在调用带参数的方法时,实参的值赋给形参,称为值传递。Java 中只有值传递,无论形参在方法中如何改变,实参不受影响。
-
当参数类型是基本数据类型时,传递的是实参的值,因此不能对实参进行修改。
-
当参数类型是对象时,传递的是对象的引用,此时可以对实参引用的对象进行修改,但是不能让实参引用新的对象。
简单来说,Java对普通类型的变量是不支持引用传递的
下面讲解两种swap方法
1.通过传数组的方法实现交换
public static void main(String[] args){
int[] a = new int[2];
a[0] = 2;
a[1] = 5;
System.out.println(a[0] + " " + a[1]);
swap(a, 0, 1);
System.out.println(a[0] + " " + a[1]);
}
static void swap(int[] a, int i, int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
大部分排序算法就是这样实现
2、通过自定义一个包装类,在属性中进行交换
class MyInt{
private int val;
public MyInt(int val){
this.val = val;
}
public void setVal(int val){
this.val = val;
}
public int getVal(int val){
return this.val;
}
}
public static void main(String[] args){
MyInt i1 = new MyInt(2);
MyInt i2= new MyInt(5);
System.out.println(i1.getVal() + " " + i2.getVal());
swap(i1, i2);
System.out.println(i1.getVal() + " " + i2.getVal());
}
static void swap(MyInt i1, MyInt i2){
int t = i1.getVal();
i1.setVal(i2.getVal());
i2.setVal(t);
}
Java中我们可以通过使用int的包装类——Integer,然后将其作为值的引用传到函数中
但这个Integer包装类也不允许你改变它的数据域;所以我们可以用自己的包装类来实现Swap
若有误,欢迎评论区指正噢~
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App