/**
* 变量:存储数据的空间
* 数据:文字和符号的表示
* 数据的分类:
* 数字:byte short int long float double
* 非数字:char boolean
*
* @author siggy
*
*/
public class VarDemo {
public static void main(String[] args) {
int a=20;
int b=10;
int c=a+b;
System.out.println("a+b="+c);
//需求:有两个变量 分别有值9,4 那么如何在不使用第三个变量的前提下交换两个变量的数据
//加减法
a=a+b;
b=a-b;
a=a-b;
System.out.println("a="+a+"\tb="+b);
//位运算
a=20;
b=10;
a=a^b;
b=a^b;
a=a^b;
System.out.println("a="+a+"\tb="+b);
//一个表达式
a=20;
b=10;
a=b+0*(b=a);
System.out.println("a="+a+"\tb="+b);
}
}
第一种加减法,当a或b为int类型的最大值时会越界,产生bug
第二种异或,简单高效,计算机本身就是二进制运算,效率更高
第三种表达式,算是编译原理的应用,两个栈,操作数栈和符号栈,然后按顺序压栈,需要注意的一点就是a=b+0*(b=a);第一个b传值,压栈进入是10,然后(b=a)压栈进入b传的是b,因为有等号,需要赋值,所以运算之后b=a=20,a等于b压栈进入的值10