JavaSE之运算符学习笔记

JavaSE之运算符学习笔记

运算符和表达式

运算符

读字面量或者变量进行操作的符号

表达式

用运算符把字面量或者变量连接起来,符合Java语法的式子就可以称为表达式

不同运算符连接的表达式体现的是不是类型的表达式

算术运算符

分类及代码实现

符号 作用
+
-
*
/
% 取余
package arithmetic;

public class ArithmeticDemo01 {
    public static void main(String[] args) {
        // +
        System.out.println(3 + 2);  // 5
        // -
        System.out.println(3 - 2);  // 1
        // *
        System.out.println(3 * 2);  // 6
        // /
        System.out.println(10 / 2);  // 5
        System.out.println(10 / 3);  // 3
        System.out.println(10.0 / 3);  // 3.3333333333333335
        // %
        System.out.println(10 % 2);  // 0
        System.out.println(10 % 3);  // 1
        // 如果有小数参与运算
        System.out.println(11.2 + 5.024);  // 16.224
        System.out.println(11.2 - 5.4);  // 5.799999999999999
        System.out.println(0.4 * 0.05);  // 0.020000000000000004

    }
}

【练习】数值拆分

  • 题目:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台

  • 代码实现

    package arithmetic;
    import java.util.Scanner;  // 导包
    
    public class ArithmeticTest1 {
        // 程序的主入口
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);  // 创建对象
            System.out.println("请输入一个三位数:");
            int num = sc.nextInt();  // 接收对象
            System.out.println("你输入的数是:" + num);
            System.out.println("个位:" + num % 10);
            System.out.println("十位:" + num / 10 % 10);
            System.out.println("百位:" + num / 100 % 10);
    
        }
    }
    
    
  • 规则

    个位:数字 % 10

    十位:数字 / 10 % 10

    百位:数字 / 100 % 10

    千位:数字 / 1000 % 10

    以此类推

这个公式可以记一下,以后不管是学什么程序,都会经历这么一题,可以和hello world相提并论。

数据类型转换(1)隐式转换

  • 概念

    取值范围小的数值转换成取值范围大的数值

  • 取值范围

    byte < short < int

  • 转换规则

    1. 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,在进行运算。
    2. byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算
  • 举例

    int a = 10;
    double b = 13.14 ;
    System.out.println(a + b);  // 23.14
    

数据类型转换(2)强制转换

  • 概念

    如果把一个取值范围大的数值,赋值给取值范围小的变量,是不允许直接赋值的,如果一定要这么做,就需要加入强制转换

  • 格式

    目标数据类型 变量名 = (目标数据类型)被强转的数据;

  • 举例

    int a = 10;
    double b = 13.14 ;
    int res = (int) (a + b);
    System.out.println((double) a);  // 10.0
    System.out.println((int) b);  // 13
    System.out.println(res);  // 23
    
    

这两种强制转换的方式别的语言都是标配,只是语言不一样。

字符串和字符串加的操作

  • + 操作中出现字符串时,这个+是字符串连接符,而不是算术运算符了。会将前后的数据进行拼接,并产生一个新的字符串
  • 连续进行+ 操作时,从左往右逐个执行
System.out.println("Hello" + "World");  // HelloWorld
System.out.println(1 + 1 + "Hello" + "World" + 1);  // 2HelloWorld1

字符相加

字符+字符字符+数字 时,会把字符通过ASCII码表查询到对应的数字在进行计算。

System.out.println('A' + 1);  // 66
System.out.println('a' + 1);  // 98
System.out.println('a' + 'b');  // 195

字符和字符相加不是新的字符串,而是对应ASCII码,这一点我吃惊了,不过又验证如果是字符类型相加,会自动提升成int,

自增自减运算符

基本用法

符号 作用 说明
++ 变量的值加1
变量的值减1

++-- 既可以放在变量的前边,也可以放在变量的后边

两种用法

  • 单独使用:++-- 无论是放在变量的前边还是后边,单独写一行结果是一样的。
  • 参与计算
    • int b = a++; 先用后加
    • int b = ++a; 先加后用
  • 单独使用

    package ArithmeticOperator;
    
    public class ArithmeticDemo02 {
        public static void main(String[] args) {
            // ++和--
            int a = 10;
            a++;
            System.out.println(a);  // 11
            ++a;
            System.out.println(a);  // 12
            a--;
            System.out.println(a);  // 11
            --a;
            System.out.println(a);  // 10
    
        }
    }
    
    
  • 参与计算

    package ArithmeticOperator;
    
    public class ArithmeticDemo02 {
        public static void main(String[] args) {
            // ++和++
            int a = 10;
            int b = a++;
            int c = ++a;
            System.out.println(a);  // 12
            System.out.println(b);  // 10
            System.out.println(c);  // 12
    
        }
    }
    
    

    a++ ,先用后加。什么意思呢,他的执行顺序是:先b = a;a+1,因此b=10

    b++,先加后用。他的执行顺序是:先a+1b = a; ,因为a++的前面还有个a++所以现在a=12,又因为c=a,所以c=12

    这个知识点日常开发的时候用不到,一般都是用单行做写循环。但是考试要考。当时C语言这个知识点我一直弄不明白。考试的前一天还在看。

赋值运算符

分类

符号 作用 说明
= 赋值 int a=10,将10赋值给变量a
+= 加后赋值 a+=b, 将a+b的值给a
-= 减后赋值 a-=b, 将a-b的值给a
*= 乘后赋值 a*=b, 将a*b的值给a
/= 除后赋值 a/=b, 将a/b的值给a
%= 取余后赋值 a%=b, 将a%b的值给a

+=-=*=/=%=、底层都隐藏了一个强制类型转换

关系运算符(比较运算符)

分类

符号 解释
== 判断左边跟右边是否相等,如果成立就是true,如果不成立就是false
!= 判断左边跟右边是否不相等,如果成立就是true,如果不成立就是false
> 判断左边是否大于右边,如果成立就是true,如果不成立就是false
>= 判断左边是否大于等于右边,如果成立就是true,如果不成立就是false
< 判断左边是否小于右边,如果成立就是true,如果不成立就是false
<= 判断左边是否小于等于右边,如果成立就是true,如果不成立就是false

注意事项:

  • 关系运算符最终的结果一定是布尔类型的。要么是true,要么是false
  • 在写==的时候,千万不要写成=
System.out.println(10 == 3);  // false

【练习】相亲对象

  • 题目

    您和您的约会对象在餐厅里面正在约会。 键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他) 如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。 否则输出false。

  • 代码

    package ComparisonOperator;
    
    import java.util.Scanner;
    
    public class ComparisonTest {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);  // 创建对象
            System.out.println("请输入你的时髦度:");
            int yuo = sc.nextInt();  // 接收对象
            System.out.println("请输入你对象的时髦度:");
            int her = sc.nextInt();  // 接收对象
            boolean res = yuo > her;
            System.out.println("相亲情况:" + res);
    
        }
    }
    
    

逻辑运算符

分类

符号 作用 说明
& 逻辑与(且) 并且,两边都为真,结果才是真
` ` 逻辑或
^ 逻辑异或 相同为false,不同为true
! 逻辑非 取反
package LogicalOperator;

public class LogicalOperatorDemo1 {
    public static void main(String[] args) {
        // &
        System.out.println(true & true);  // true
        System.out.println(false & false);  // false
        System.out.println(false & true);  // false
        System.out.println(true & false);  // false

        // |
        System.out.println(true | true);  // true
        System.out.println(false | false);  // false
        System.out.println(false | true);  // true
        System.out.println(true | false);  // true

        // ^
        System.out.println(true ^ true);//false
        System.out.println(false ^ false);//false
        System.out.println(true ^ false);//true
        System.out.println(false ^ true);//true
        
        // !
        System.out.println(!true);  // false
        System.out.println(!false);  // true
        
    }
}

异或,Java提出了一个这样的运算符。C语言好像是没有的,python没有。

怎么说呢,民政局结婚,男生和男生不可能结婚,女生和女生也是,但是男生和女生可以结婚。

可以用来写注册。用户名和密码不能是一致。

这个实际用的很少。

短路逻辑运算符

分类

符号 作用 说明
&& 短路与 运算结果跟&是一模一样的,只不过具有短路效果。
` `
package LogicalOperator;

public class LogicalOperatorDemo1 {
    public static void main(String[] args) {
        // &&
        System.out.println(true && true);  // true
        System.out.println(false && false);  // false
        System.out.println(false && true);  // false
        System.out.println(true && false);  // false

        // ||
        System.out.println(true || true);  // true
        System.out.println(false || false);  // false
        System.out.println(false || true);  // true
        System.out.println(true || false);  // true

    }

}

注意事项:

  • &|无论左边true false,右边都要执行。

    &&,如果左边能确定整个表达式的结果,右边不执行。

    &&:左边为false,右边不管是真是假,整个表达式的结果一定是false。

    ||:左边为true,右边不管是真是假,整个表达式的结果一定是true。

    这两种情况下,右边不执行,提高了效率。

  • 最常用的逻辑运算符:&&||!

个人理解

短路运算符也是Java自己独有的、什么意思呢?

package LogicalOperator;

public class LogicalOperatorDemo1 {
    public static void main(String[] args) {
        // &
        System.out.println(true & true);  // true
        System.out.println(false & false);  // false
        System.out.println(false & true);  // false
        System.out.println(true & false);  // false

        // &&
        System.out.println(true && true);  // true
        System.out.println(false && false);  // false
        System.out.println(false && true);  // false
        System.out.println(true && false);  // false

    }
}

这样看来,逻辑运算符与短路运算符并没有区别,接着看例子

package LogicalOperator;

public class LogicalOperatorDemo2 {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        boolean result = a++ < 5 && b++ < 5;
        System.out.println(result);  // false
        System.out.println(a);  // 11
        System.out.println(b);  // 10

    }
}

还有一段

package LogicalOperator;

public class LogicalOperatorDemo2 {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        boolean result = a++ < 5 & b++ < 5;
        System.out.println(result);  // false
        System.out.println(a);  // 11
        System.out.println(b);  // 11

    }
}

先说&&&的作用是一致的,两边都为真,结果才是真

boolean result = a++ < 5 && b++ < 5; 已经得出a++ < 5 这是假的了,这个结果已经是false了、所以b++ < 5 不在执行了。可以看作是b++ < 5 这边短路了。

boolean result = a++ < 5 & b++ < 5; 已经得出a++ < 5 这是假的了,这个结果已经是false了、但是我不放心,我还要在计算一遍b++ < 5

&&& 可以理解为执行效率不一样。&& 执行快。

  • 最常用的逻辑运算符:&&||!

【练习】数字6

  • 题目

    数字6是一个真正伟大的数 , 键盘录入两个整数。 如果其中一个为6 最终结果输出true。 如果它们的和为6的倍数。最终结果输出true。 其他情况都是false。

  • 代码实现

    // 数字6.Java
    package LogicalOperator;
    import java.util.Scanner;
    
    public class LogicalOperatorTest1 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);  // 创建对象
            System.out.println("请输入1个数字:");
            int num1= sc.nextInt();  // 接收对象
            System.out.println("请输入2个数字:");
            int num2= sc.nextInt();  // 接收对象
            boolean result;
            result = num1 == 6 || num2 == 6 || (num1 + num2) % 6 ==0;
            System.out.println(result);
    
        }
    }
    
    

三元运算符

  • 作用

    可以进行判断,根据判断内容得到不同的结果

  • 格式

    关系表达式? 表达式1: 表达式2;

  • 计算规则

    • 计算关系表达式的值。
    • 如果关系表达式的值为真,那么执行表达式1。
    • 如果关系表达式的值为假,那么执行表达式2。
  • 注意点

    三元运算符的最终结果一定要被使用,要么赋值给一个变量,要么直接打印出来。

package ThreeElementOperator;

public class ThreeElementOperatorDemo1 {
    public static void main(String[] args) {
        int a = 5;
        int b = 10;
        int max = a > b ? a: b;
        System.out.println(max);  // 10
        System.out.println(a > b ? a: b);  // 10
    }
}

【练习】两只老虎

  • 题目

    动物园里有两只老虎,两只老虎的体重分别为通过键盘录入获得,

    请用程序实现判断两只老虎的体重是否相同。

  • 代码实现

    package ThreeElementOperator;
    
    import java.util.Scanner;
    
    public class ThreeElementOperatorTest1 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入第1只老虎体重");
            int weight1 = sc.nextInt();
            System.out.println("请输入第2只老虎体重");
            int weight2 = sc.nextInt();
            int max = weight1 > weight2 ? weight1: weight2;
            System.out.println(max);  // 10
    
        }
    }
    
    

【练习】求三个数的最大值

  • 题目

    ​ 一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm。

    请用程序实现获取这三个和尚的最高身高。

  • 代码实现

    package ThreeElementOperator;
    
    public class ThreeElementOperatorTest2 {
        public static void main(String[] args) {
            int number1 = 50;
            int number2 = 75;
            int number3 = 100;
            int temp = number1 > number2 ? number1: number2;
            int max = number3 > temp ? number3: temp;
            System.out.println(max);  // 100
        }
    }
    
    

运算符的优先级

优先级 运算符
1 .(){}
2 !~++--
3 */%
4 +-
5 <<>>>>>
6 <<=>>=instanceof
7 ==!=
8 &
9 ^
10 `
11 &&
12 `
13 ?:
14 =+=-=*=/=%=&=

有的运算符好像还没有学到欸

总结

这些内容好像是每个语言的标配,如果是计算机专业同学,自然而然这些也是常识了。但是也有那么几个不用的,

异或是什么?短路运算符是什么?然后Java的运算符优先级?

这些可能是需要重点看一下,学习一下,异或很少用,短路运算符可以当作逻辑运算符用,剩下的也没有什么了。

好了,我的学习笔记到此结束。

里面肯定有许许多多的bug,欢迎大家指出!毕竟这样成长更快。

也感谢大家可以看到这样,如果帮到了你,是我的荣幸。

谢谢大家!

你可能感兴趣的:(JavaSE基础,学习,java,算法)