我们现在有int a = 2,int b = 3;如何把a和b两个变量的值进行交换呢?对于刚接触编程的人来讲,你可能会想,这有什么难的,a = b ; b = a;不就完了。事实上,还真没这么简单:

在java中,=是个赋值运算符,意思是把=后面的内容赋给前面,例如a = 2;就是把2给了a的意思,如果我们直接a = b,意味着我们现在把b代表的值给了a,这样给了之后a和b的值就相等了,都等于b的值,也即3,这时我们再b = a,也就是把a的值3给b,b本来也是3,这样没完成交换:结果是a和b都是3了。

package test;
public class Test {public static void main(String[] args) {int a = 2;int b = 3;a = b;// a = 3,b = 3b = a;// a = 3,b = 3System.out.println("a="+a);System.out.println("b="+b);}
}

这种方法不行,我们只能思考其他的办法:

方法一:借助第三个变量c

对于a和b的值,要想交换,必须不被覆盖,我们可以用这种思路:

假如有小a,小b,小c三个人,小a,小b手中有东西,小c是空着手的,现在小a和小b想交换手中的东西,小a可以把自己手中的东西先给小c拿着,这样小a手就空着了(事实上a手中没空,这里的赋值给c是复制了一份给了c,虽然没空但我们可以使用给a这个变量重新赋值了),然后小b就可以把手中的东西给小a了,然后小c再把手中的东西也即小a的东西给小b,这样就完成了交换:

package test;
public class Test {public static void main(String[] args) {int a = 2;int b = 3;int c = a;a = b;b = c;System.out.println("a="+a);System.out.println("b="+b);}
}

对于刚接触编程的同学,这个程序一定要好好理解。

方法二:不借助第三个变量

不借助第三个变量,我们仍然可以完成交换,使用+和-号:

package test;
public class Test {public static void main(String[] args) {int a = 2;int b = 3;a = a + b;// a = 5,b = 3;b = a - b;// b = 2,a = 5;a = a - b;// a = 3,b = 2;System.out.println("a="+a);System.out.println("b="+b);}
}

看注释可以很清楚的看明白这个过程。

同样思路的我们还可以使用异或符号:^

package test;
public class Test {public static void main(String[] args) {int a = 2;int b = 3;a = a^b;// a = 1,b = 3;b = a^b;// b = 2,a = 1;a = a^b;// a = 3,b = 2;System.out.println("a="+a);System.out.println("b="+b);}
}

转载于:https://blog.51cto.com/632977922/1227797

javaSE-基础篇-经典赋值:两变量值的交换相关推荐

  1. JavaSE基础篇--Java SE语法02--基本语法

    JavaSE基础篇 Java SE语法02 HelloWorld 基本语法 流程控制 方法 数组 基本语法 标识符 关键字 数据类型 运算符 数据类型转换 运算后结果的数据类型 Java SE语法02 ...

  2. 通过位运算进行两个变量值的交换功能

    通过位运算进行两个变量值的交换功能 一般交换方法 通常的交换两个变量a,b的过程为 int temp; temp=a a=b; b=temp; 需借助上面的第3个临时变量temp. 位运算交换方法 采 ...

  3. JavaSE基础篇---processon在线脑图分享

    JavaSE基础篇学习笔记脑图 按照学习阶段按java基础知识.变量与运算符.流程控制.数组再到面向对象,结合课程以及学习笔记做成的脑图,内容较多,仅供个人学习.详细见链接脑图.

  4. JAVA-SE基础篇-非静态内部类

    JAVA-SE基础篇-非静态内部类 /*** 非静态内部类* 知识点* 1. 非静态内部类 BattleScore "战斗成绩"* 非静态内部类可以直接在一个类里面定义* 比如:* ...

  5. JavaSE基础篇——超详细,Java入门,这一篇就够了

    第一节:Java语言概述 一.java背景知识 1.Java是美国sun公司(Stanford University Network)在1995年推出的一门计算机高级编程语言. 2.Java早期被称为 ...

  6. 面试奇葩——交换两变量值的一些邪门歪道

    交换两个变量的值,最常见的写法是 int i , j ;int temp ;temp = i ;i = j ;j = temp ; 这种写法相信任何学过程序设计语言的都知道. 然而有些着三不着两的极品 ...

  7. php 实现两变量值对换,PHP互换两个变量值的方法(不用第三变量)

    前言 今天在这里我们就来看看,在PHP中如何在不使用第三变量的情况下,达到交换两个变量值得目的.详细的解说见代码注释,下面来一起看看吧. 一.substr() && strlen() ...

  8. java如何用异或符号实现两个变量值的交换

    在网上看到如何利用异或来实现两个变量的交换,感觉很方便,但是理解起来优点难度,做个笔记,加深理解. 首先先对异或有个了解: 相同的异或之后则为0,不相同的则为1. a:1000 1010, b:100 ...

  9. 【C语言】两个变量值的交换——指针

    C语言中交换两个变量的值可以在主函数中直接实现,也可以通过子函数来实现.下面我们介绍用子函数实现的情况. 1.将两个变量的值作为实参直接传递,在子函数内部定义一个普通变量来对两个形参进行交换,并分别在 ...

最新文章

  1. 用 API 提取、写入指定网站的 Cookie - 回复 bangrj 的问题
  2. 【有三说图像】边缘检测(上)
  3. python实现多表格合并_用python实现多个表格合并按字段去重
  4. linux spi驱动分析 三,Linux下SPI驱动分析
  5. 网络营销第四课:网络营销需要掌握的网页代码(2)
  6. flashAndPHP 简单交互
  7. 计算机考研高分扎堆学校如何处理,考研:名校400+扎堆,450+和数学满分频现,网友:这届太厉害了!...
  8. oracle扩容bigfile,Oracle10g BIGFILE表空间带来的好处
  9. 如何减小电压跟随器输出电阻_气动操作器FBD5061SF-1蓝宇品牌安徽
  10. Object的构造函数方法
  11. android.support.v7.app.actionbaractivity 报错
  12. Udemy上Gephi教程笔记1
  13. Spring bean生命周期详解
  14. 数字化转型— 华为业务流程模型学习
  15. 马云现场演讲:宣布卸任董事局主席——“青山不改,后会有期!”
  16. 免费logo设计在线生成
  17. 【MQTT学习】lesson8. :Retained 消息和 LWT
  18. html2canvas实现网页局部存为图片和打印
  19. [转载]拥抱Jini:从Starter Kit 2.0开始(第二部分)
  20. http的安全方法和幂等性

热门文章

  1. 删除oracle的注册,oracle数据库账号删除oracle收集系统统计信息
  2. python 点云配准,python点云滤波 点云配准用python怎
  3. servlet多重映射_【简答题】请简要概述什么是Servlet的多重映射,并列出Servlet多重映射的实现方式。...
  4. 嵌入式linux实验一vim的使用,嵌入式Linux C语言开发工具—vi/vim实训操作
  5. WHATWG API——url.parse()的替代方案
  6. php返回图片二进制字节数组,获取图片文件的二进制数组
  7. int n=10的sizeof 为什么是四_从int取值范围谈起
  8. visual studio code typescript 防止 import statement 断行
  9. java filechooser_Java—FileChooser(示例代码)
  10. 实现isnum函数python_python 学习 实现isOdd函数 实现isNum()函数 实现multi() 实现isPrime() 格式化输出日期DAY16...