在很多时候,我们会使用到将两个整型变量值进行互换,比如冒泡排序,通过判断来将数组变量的值逐步交换,那么怎么交换值才能最有效最节省空间呢?

首先,我们会想到的,用一个零时变量来做中间的过度存储空间,这是很容易想到的方法,实现如下:

int i = 10;  //声明变量 i,并给 i 赋值为10

int j = 20;  //声明变量 j,并给 j 赋值为20

int temp;  //声明零时变量temp

那么,我们要将变量 i 的值赋给变量 j ,就得通过零时变量temp存储其中一个变量的值:

temp = i ;   //将变量 i 值暂存于零时变量temp中,即temp = 10;

i = j ;    //将变量 j 的值赋值给变量 i ,即 i = 20;

j = temp ;    //将零时变量存放的值赋值给变量 j ,即 j = 10;

这样,我们就完成了最简单的值互换。

其次,既然我们需要互换的是int类型的变量,那么就可以进行数值运算及加减乘除来实现变量值的互换。

int i = 10;  //声明变量 i,并给 i 赋值为10

int j = 20;  //声明变量 j,并给 j 赋值为20

i = i + j;  //将 i + j(10+20) 的和赋值给变量 i ,赋值后变量 i 的值为 30

j = i - j;  //将 i - j(30-20) 的差赋值给变量 j ,赋值后变量 j 的值为 10

i = i - j;  //再运算一次,将 i - j(30 - 10)的差赋值给变量 i ,赋值后变量 i 的值为 20

这样,我们也完成了两个变量值的互换,这样的好处是不需要第三个变量参与,节省了运行内存。

最后,我们可以通过位运算中的异或运算(^)实现变量值的交换,异或运算是位运算,其规则是相同为0,不同为1,即1^0或0^1的取值为1,1^1或0^0的取值为0,实现如下:

int i = 10;  //声明变量 i,并给 i 赋值为10

int j = 20;  //声明变量 j,并给 j 赋值为20

//其中变量 i 的值为10,其二进制编码为:0000 1010

//其中变量 j 的值为20,其二进制编码为:0001 0100

i = i ^ j ;  //即为 10 ^ 20 ,根据 ^ 的运算规则可知,其结果是 0001 1110 ,转换成十进制为:24 + 23 + 22+ 2 = 30 ,

//并将30赋值给变量 i ,即 i = 30

j = i ^ j ;  //即为 30 ^ 20,其结果是 0000 1010,转换成十进制为10,并将结果赋值给变量 j ,即 j = 10

i = i ^ j ;  //即为 30 ^ 10,其结果是 0001 0100,转换成十进制为20,并将结果赋值给变量 i ,即 i = 20

这种方式不需要使用零时变量,且是通过位运算,增加了其运算速度。

总结,在完成代码时,我们要在解决问题的同时思考更加高效率的解决方案,当然,我们也要明白不同方案的优点和缺点,虽然有些方案可以提高运行效率,比如上述的第三种方案,但是他没有第一种方案直观,并且效率也没有说完全高太多,只要在可接受的运行时间和空间内解决问题,那么我们完全可以使用第一种更为简单和直观的方式解决问题。

java 两个值对换_java将两个整型变量值进行互换的几种实现方法相关推荐

  1. java 日期 相差的天数_JAVA计算两个日期之间相差的天数

    在Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用. 调用方式: long date1 = getDateTime("20121201");//可 ...

  2. java比较两个字符串变量_Java 比较两个字符串内容是否相等

    最近在做松哥的微人事项目时,编写SpringBoot后台接口时遇到一个小问题,就是当比较两个String对象内容是否相等时,我第一次使用==没有得到预想到的结果,改成String的equals()方法 ...

  3. java int 传引用吗_Java的参数传递是「值传递」还是「引用传递」?

    关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题. 有人说Java中只有值传递,也有人说值传递和引用传递都是存在的,比较容易让人产生疑问. 关于值传递和引用传递其实需要分情况看待. ...

  4. java中接口私有反方_Java 8:在接口中声明私有和受保护的方法

    java中接口私有反方 引入Java 8时,我们可以在接口中使用默认方法. 此功能的主要驱动程序是允许接口扩展,同时保留对旧接口版本的向后兼容性. 一个示例是在现有Collection类中引入stre ...

  5. java对象什么时候回收_Java对象的生命周期与垃圾回收以及四种引用

    创建对象的方式用new语句创建对象. 使用反射,调用java.lang.Class或java.lang.reflect.Constructor的newInstance()实例方法. 调用对象的clon ...

  6. java判断两个int相等_Java 判断两个变量是否相等

    判断两个变量是否相等的方式有两种:利用运算符 == 利用equals方法 (1)比较基本Java基本数据类型 比较基本数据类型,只能用"==",不能用equals,这里比较的是两个 ...

  7. java计算时间区间工作日_Java如何计算两个日期之间的工作日数?

    以下代码可帮助您查找两个日期之间指定的工作日(星期一,星期二,星期三等)的数量.我们下面使用的解决方案是在两个日期之间循环,并检查这些日期的工作日是否等于我们要计算的日期.package org.nh ...

  8. java两个字符串前缀_java – 找到两个字符串的最长公共前缀

    我想找到两个字符串的最长公共前缀. 有没有办法循环我的最后几个if语句,以便我可以结束彼此不匹配的最后几个字符? System.out.println("Enter the first st ...

  9. java保留两位小数怎么_java保留两位小数4种方法

    java保留两位小数4种方法 Java中保留小数有四种方法,如下: public class Format { double f = 23065.57845; public void m1() { B ...

最新文章

  1. 成为顶级CIO ,应该怎么做?
  2. 直正的互联网产品设计:七个作为产品经理实际上很重要的”小事“
  3. CUDA从入门到精通(零):写在前面
  4. 一句话设置当前控制器的view跟随键盘起伏,妈妈再也不用担心键盘挡住输入框了...
  5. UE4学习-添加机关并添加代码控制
  6. printf不明确_资源贴|不是吧,还有人不知道指针?你想知道还不点进来看看?...
  7. java+输出流++空值_一文搞定Java的输入输出流等常见流
  8. 盼达用车:由于公司经营原因 2月1日起暂停运营
  9. HTML页面的基本代码结构是什么?
  10. 全职宝妈做自媒体怎么样
  11. OFFICE技术讲座:标点压缩是各大OFFICE软件差异关键,总体考量有哪些
  12. 关键路径例题图解_图解!九大常见数据结构被24张图给安排的明明白白
  13. s7-200通信测试软件,S7-200 SMART 与调试助手之间 TCP 通信[技术学习]
  14. WebWork深入浅出 (转贴)http://www.blogjava.net/moxie/archive/2006/10/20/76375.html
  15. 计算机系军训口号四句霸气,军训口号 四句 霸气
  16. 链接mysql 504_phpMyAdmin错误代码:504 MySQL查询
  17. 中国千家主要规划设计勘察单位
  18. 如何通过市场中性策略获利
  19. Ajax速通(四)——axios
  20. NLP初学-文本预处理

热门文章

  1. Lidar与IMU标定代码实战:lidar_align
  2. 直播回顾|大规模点云显示技术
  3. DeepChem | PyTorch中用自定义层实现DeepChem的GraphConvLayer
  4. Nat. Mach. Intell. | 基于深度强化学习寻找网络中的关键节点
  5. 第三课.使用简单的NN模拟fizzbuzz
  6. python math库常用函数_Python math库常用函数
  7. Galaxy Release_20.09 发布,新增多个数据上传组件
  8. 腾讯终于良心了!桌面混乱终于有救了
  9. iMeta | 南科大宋毅组综述逆境胁迫下植物向微生物组求救的遗传基础(附招聘)
  10. 西湖大学鞠峰组:环境宏病毒组学分析思路与常用工具