程序员都知道,在C/C++里面交换值的方法:

void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}

但是在Java中这种方法是行不通的,因为Java对普通类型的变量是不支持引用传递的。  

怎么办呢?


1.可以像下面这样通过传数组(也属于传值)的方法来完成交换(很多排序算法就是这样实现)。

public static void swap(int[] data,int a,int b){
int temp=data[a];
data[a]=data[b];
data[b]=temp;
}
package pkg2020华南虎;

/**
*
* @author yl
*/
public class SwapValue { public static void main(String[] args) {
SwapValue sv = new SwapValue();
int[] num = new int[2];
num[0] = 20;
num[1] = 30;
sv.swap(num, 0, 1);
System.out.println("num1,num2:" + num[0] + "," + num[1]);
} public static void swap(int[] data, int a, int b) { int temp = data[a];
data[a] = data[b];
data[b] = temp;
}
}

或者

package pkg2020华南虎;

/**
*
* @author yl
*/
public class SwapValue { public static void main(String[] args) { int[] num = new int[2];
num[0] = 20;
num[1] = 30;
swap(num, 0, 1);
System.out.println("num1,num2:" + num[0] + "," + num[1]);
} public static void swap(int[] data, int a, int b) { int temp = data[a];
data[a] = data[b];
data[b] = temp;
}
}

注意:数组排序从0开始。  


2.也可以通过重新定义个类(在Java中我们可以通过使用int的包装类——integer,然后将其作为值得引用传到函数中,但这个integer包装类也不允许你来改变它的数据域;但这不妨碍我们用自己的包装类,比如说下面实现的MyInteger():

package pkg2020华南虎;

/**
*
* @author yl
*/
//MyInteger:于Integer类似,但是其对象可以变值
class MyInteger { private int x;//将x作为唯一的数据成员 public MyInteger(int xIn) {
x = xIn;
}//构造器 public int getValue() {
return x;
}//得到值 public void insertValue(int xIn) {
x = xIn;
}//改变值
} public class SwapValue02 { static void swap(MyInteger xWrap, MyInteger yWrap) {
int temp = xWrap.getValue();
xWrap.insertValue(yWrap.getValue());
yWrap.insertValue(temp);
} public static void main(String[] args) {
int a = 23, b = 25;
MyInteger aWrap = new MyInteger(a);
MyInteger bWrap = new MyInteger(b);
swap(aWrap, bWrap);
a = aWrap.getValue();
b = bWrap.getValue();
System.out.println("a,b is: " + a + "," + b);
}
}

3.由于Java中的参数传递都是采用的值传递方式,这不妨碍我们用swap的时候采用外部内联的方式:  

package pkg2020华南虎;

/**
*
* @author yl
*/
public class SwapValue03 { int i, j; public static void main(String[] args) {
SwapValue03 sv = new SwapValue03(1, 2);
sv.swap();
System.out.println("i,j =" + sv.i + "," + sv.j);
} public SwapValue03(int i, int j) {//构造方法
this.i = i;
this.j = j;
} public void swap() {
int temp = i;
i = j;
j = temp;
}
}

Java中的Swap,如何实现?的更多相关文章

  1. Java中swap()实现

    Java中swap()实现 1.今天可爱的谭老师发了一道题目,使用java写方法交换Integer类型数据,而且入参固定了,题目请下图: 入参固定的话,当时想到的是重新定义一个自己的Integer类型 ...

  2. 转——JAVA中calendar,date,string 的相互转换和详细用法

    package cn.outofmemory.codes.Date; import java.util.Calendar; import java.util.Date; public class Ca ...

  3. JAVA中关于并发的一些理解

    一,JAVA线程是如何实现的? 同步,涉及到多线程操作,那在JAVA中线程是如何实现的呢? 操作系统中讲到,线程的实现(线程模型)主要有三种方式: ①使用内核线程实现 ②使用用户线程实现 ③使用用户线 ...

  4. java中两个值互换

    两个值互换有以下三种方式: 使用临时变量(此种方法便于理解) x = 10; y = 20; //begin int temp = x; x = y; y = temp; //end; //此时x = ...

  5. 《Java中方法的参数传递方式只有一种:值传递》

    //方法的参数传递机制(1):基本类型做形参的传递. class PrimitiveTransferTest { public static void swap(int a,int b) { //下面 ...

  6. Redis学习记录之Java中的初步使用

    1.关于Redis redis下载地址:<span style="font-family: Arial, Helvetica, sans-serif;">http:// ...

  7. java中经常使用的日期格式化(全)

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  8. java中的mmap实现--转

    什么是mmap mmap对于c程序员很熟悉,对于java程序员有点陌生.简而言之,将文件直接映射到用户态的内存地址,这样对文件的操作不再是write/read,而是直接对内存地址的操作. 在c中提供了 ...

  9. Java中Date各种相关用法

    Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set ...

随机推荐

  1. Java数据库操作学习

    JDBC是java和数据库的连接,是一种规范,提供java程序与数据库的连接接口,使用户不用在意具体的数据库.JDBC类型:类型1-JDBC-ODBC桥类型2-本地API驱动类型3-网络协议驱动类型4 ...

  2. LabWindows/CVI基础

    1.LabWindows/CVI了解 提到NI公司,大家可能最先联想到的是NI公司推出的LabVIEW软件.LabWindows/CVI与LabVIEW相比,主要应用在各种测试.控制.故障分析及信息处 ...

  3. python scrapy爬取前程无忧招聘信息

    使用scrapy框架之前,使用以下命令下载库: pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple 1.创建项目文件夹 scr ...

  4. 关于在vuejs中动态加载不确定数量和内容的组件的解决方案

    在做一个门户项目的时候,客户要求需要进行私人化定制,每个人进入首页的时候可以自定义首页显示的版块 要在4.50个组件中显示随机N个组件按照每个人选定的顺序排列.需求说完了,接下来说说解决方案: htm ...

  5. shellcode超级反杀

    shellcode超级免杀 作者声明: 本文章属于作者原创,不能转载,违反网络安全法自己承担.这里只供学习使用. 日期: 2019-12-30 我试过了电脑管家,火绒安全,360....一系列杀毒软件 ...

  6. MyBatis学习与使用(一)

    写在前面—— 用 MyBatis 也做过几个项目了,但是一直没有很深入的去理解这个框架,最近决定从头开始学习和整理MyBatis. 之前开发的项目并不是我先创建的,等我介入的时候发现他们已经稍稍封装了 ...

  7. JVM探秘:Java内存区域

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 概述 Java 虚拟机为程序员分担了很多内存管理的工作,不再像 C/C++ 那样容易出 ...

  8. Python 官方团队在打包项目中踩过的坑

    花下猫语:这是 packaging 系列的第三篇译文,该系列是全网关于此话题的最详尽(水平也很高)的一个系列.原作者是 Python 官方打包团队成员,是 virtualenv 和 tox 项目的维护 ...

  9. JSONP Hijackin攻击详解

    JSONP Hijackin的中文意思是JSON劫持,而能产生JSON数据劫持的原因在于前端被跨站攻击了.跨站=跨域,跨域从字面上理解的话,就是指超出了范围.领域.继续追问一下,那超出了什么范围?原来 ...

  10. SpringBoot 2.1.6 启动原理解析(一)

    小白第一次写博客,如果有不足之处烦请各位大佬指正. 用了好久的SpringBoot了,一直不清楚它内部的一些启动原理,如何加载yml文件.如何初始化bean的,今天就记录一下,新建了一个springb ...