java运算符01_运算符(上)

1.赋值运算符

=,把等号右边表达式的结果赋值给等号左边的变量或final修饰的常量。

【随堂练习】

1、交换两个变量的值(用两种方式实现)。

方案一:定义一个零时变量来实现

public class OperatorDemo {
    public static void main(String[] args) {
        int num1 = 3, num2 = 5;
        // 方案一:定义一个零时变量来实现
        int temp = num1;
        num1 = num2;
        num2 = temp;
        // 交换之后:num1 = 5, num2 = 3
        System.out.println("num1 = " + num1 + " num2 = " + num2);
    }
}

该方式的优点:特别好理解,缺点:需要定义零时变量,浪费内存空间。

方案二:一加两减。

public class OperatorDemo {
    public static void main(String[] args) {
        int num1 = 3, num2 = 5;
        // 方案二:一加两减。
        num1 = num1 + num2; // num1 = 8
        num2 = num1 - num2; // num2 = 3
        num1 = num1 - num2; // num1 = 5
        // 交换之后:num1 = 5, num2 = 3
        System.out.println("num1 = " + num1 + " num2 = " + num2);
    }
}

该方式的优点:无需定义零时变量,节约内存空间,缺点:不太好理解。

2.算数运算符

算数运算符可分为:一元运算符和二元运算符

  • 二元运算符,需要两个操作数参与运算。

  • 一元运算符,只需要一个操作数参与运算。

2.1一元运算符

只需要一个操作数的运算符称为一元运算符,如++,-- 等。

++ 自增运算符

num++++num,都等价于num = num + 1

num++++num的区别:

  • ++num 先自增,后参与运算

  • num++ 先参与运算,后自增

-- 自减运算符

num----num,都等价于num = num - 1

num----num的区别

  • --num 先自减,后参加运算

  • num-- 先参与运算,后自减

【思考】

1、可以对常量进行递增或递减操作吗?例如:5++或++5。

【随堂练习】

1、int a = 3, b = 4; 求a++ / 3 + --b * 2 - a-- % 6 + b++ * 3 - ++b的值。

【经典面试题】

1、int num = 5; num = num++;请问代码执行后num的值为多少?

分析:很多学生以为num的结果为6,实际上num的结果为5,接下来我就给大家分析一下此题。

“num = num++;”底层操作
    第一步:定义一个零时变量,用于保存num的值。
          int temp = num; --> temp = 5;
    第二步:执行num的自增操作,也就是执行num++操作
          num = num + 1;    --> num = 6;
    --------------以上两步执行的是等号有边的操作-------------
    --------------最后一步,执行的是赋值操作-------------
    第三步:把零时变量的值赋值给等号左边的num。
          num = temp;   --> num = 5;

2.2二元运算符

二元运算符指的是需要两个操作数才能完成运算的运算符,例如:+,-,*,/,%。

+,加法运算,连接符操作,还可以表示正数。

-,减法运算,还可以表示负数。

*,乘法运算

/,除法运算

%,取模运算或取余运算,获得两个数相除的余数。

取模运算示例:

0 % 3,结果为:0 --> 强调,零模任何一个数,结果都为零。
1 % 3,结果为:1
2 % 3,结果为:2
3 % 3,结果为:0
4 % 3,结果为:1

取模运算的使用场合:判断m是否能被n整除:

  • 如果m能被n整除,则m%n的结果为零。

  • 如果m不能被n整除,则m%n的结果不为零。

【注意事项】

  1. 两个整数做除法运算,返回的结果肯定是一个整数。

  2. 两个数做除法运算,分母不允许为零,否则抛出算数异常。

【随堂练习】

1、获取整数987的百位数、十位数和个位数。

public class OperatorDemo {
    public static void main(String[] args) {
        // 2、获取整数987的百位数、十位数和个位数。
        int num = 987;
        // 个位数,7
        int bit1 = num % 10;
        System.out.println("个位数:" + bit1);
        // 十位数,8
        // 方案一:先获得98,然后再获得8
        // int bit2 = num / 10 % 10;
        // 方案二:先获得87,然后再获得8
        int bit2 = num % 100 / 10;
        System.out.println("十位数:" + bit2);
        // 百位数,9
        int bit3 = num / 100;
        System.out.println("百位数:" + bit3);
    }
}

3.扩展赋值运算符

扩展赋值运算符:是算术运算符和赋值运算符结合。

运算符 用法举例 等效的表达式
+= a += b a = a+b
-= a -= b a = a-b
*= a *= b a = a*b
/= a /= b a = a/b
%= a %= b a = a%b

【随堂练习】

1、获取三个学生的成绩,并计算三个学生成绩的平均分。

【常见面试题】

1、int num = 3; num *= 2 + 3; 请问num的结果为多少?

分析:很多同学认为num *= 2 + 3;等效于num = num*2 + 3,所以认为num的结果为9。

​ 而实际上,num *= 2 + 3;等效于num = num*(2 + 3),所以num正确的结果是15。

2、short num = 11; num = num + 1;short num = 11; num += 1;哪一个正确呢?

分析:short num = 11; num = num + 1;语法错误,因为num + 1的结果为int类型。
short num = 11; num += 1;语法正确,因为num += 1;等效于num = (short)(num + 1);

3、int sum += 30; 请问这行语句语法是否正确???

分析:int sum += 30; 等效于int sum; sum += 30;,num只声明未赋值,无法参与算数运算,所以该语句语法错误。

4.关系运算符

关系运算符用来进行比较运算,关系运算符的运算结果是boolean类型。条件成立,则返回true。条件不成立,则返回false。。

、 <、>=、<=、==、!=

==(相同):比较左右两边的数值是否相同。相同则返回true,否则返回false。

!=(不相同):比较左右两边的数值是否不相同。不相同则返回true,相同则返回false。

注意事项:

1、请问以下代码执行的结果是什么???

boolean flag = false;
if(flag = true) { 
    System.out.println("flag等于true");  // 此行语句输出
}
else {
    System.out.println("flag等于false");  
}   

注意:在if的条件表达式中,”flag = true“做了赋值操作,而不是比较操作。

建议:常量放在”==“的左边,变量放在”==“的右边。

好处:如果“==”误写为“=”,那么问题就提前暴露在编译时,避免把问题暴露在运行时。

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

你可能感兴趣的:(java运算符01_运算符(上))