今日内容:

1. 算数运算符

2. 赋值运算符

3. 关系运算符

4. 逻辑运算符

5. 位运算符

6.三目运算符

 

一 运算符


运算:对常量和变量进行操作的过程称为运算

运算符:对常量和变量进行操作的符号称为运算符

操作数:参与运算的数据称为操作数

 

1. 算数运算符

1.1. 加减乘除运算

1.1.1  加减乘除运算

+:   正号;加法运算;字符串的连接

—: 负号;减法运算

* :  乘法

/  :  除法运算,取商

%:取余

注意事项:

  整数和整数相运算得到的还是整数,运算时从左往后,先算乘除后加减,有括号先算括号

案例:



1 class MathOperatorDemo{
 2     public static void main(String[] args){
 3         int a = 13;
 4         int b = 2;
 5         System.out.println(a+b); // 15
 6         System.out.println(a-b); // 11
 7         System.out.println(a*b); // 26
 8         System.out.println(a/b); // 6,两个int相运算,得到的结果还是int
 9         System.out.println(a%b); // 1    
10     }        
11 }



若想a/b等于6.5,则第8行代码改为如下两行之一:



System.out.println(1.0*a/b) //7.5
System.out.println((double)a/b) //7.5 , 若将a/b用括号括起来,则结果为7.0



 

1.2 加加和减减的运算

(1)++前加加,放在变量的前面;后加加,放在变量的后面(只能操作变量)

   单独使用的时候,二者相同,就是做了一个加1的操作

 参与运算时又区别:

      前加加:先加1,后运算(包括赋值,打印语句,小括号)

      后加加:先运算,后加1

 

案例:



class MathOperatorDemo2{
    public static void main(String[] args){
        int a = 10;
        int b = 10;
        System.out.println(a++); //10  后加加,先运算(打印)后加1,打印完后a=11
        System.out.println(++b); //11  前加加,先加1,后运算
    }
}



若在打印前,加上a++;b++;则两个打印的结果都为11

(2)练习



/*
 1:基本小题目
int a = 10;
int b = 10;
int c = 10;
a = b++;c=--a;b = ++a;a=c--;
请分别计算出a,b,c的值
**/

class MathOperatorTest{
    public static void main(String[] args){
        int a = 10;
        int b = 10;
        int c = 10;
        a = b++; //a=10,b=11 后加加,先赋值a=10,赋值后b加1变成了11,后面同理
        c = --a; //c=9,a=9
        b = ++a; //b=10,a=10
        a = c--; //a=9,c=8
        System.out.println(a); //9
        System.out.println(b); //10
        System.out.println(c); //8
        
    }
}



稍微复杂点的题目



int a = 4;
int b = (a++)+(++a)+(a*10);// 70



  注意:括号也要看成一种运算

(a++) 后加加, 先运算,先算小括号,小括号的值4,后加1, a 变成了5

(++a) 前加加,先加1 ,a 变成了6, 小括号的值变成了6

4+6+60 = 70

2. 赋值运算符

符号:=,+=,-=,*=,/=,%=

=为基本的赋值运算符,其他的为扩展的赋值运算符

注意:+=,-=,*=,/=,%= 等符号中包含了一个强制类型转换

如下代码(为面试题)



short s = 1; 
s = s + 1; // 错误,右边预算完数值类型为int,但左边的s为short类型,int范围大于short,所以会报错
s += 1;  // 等价于 s = (short)(s+1),所以不会报错



 

案例



class GiveValueOperatorDemo{
    public static void main(String[] args){
        int a = 13;
        int b = 2;
        System.out.println(a+=b); //15 a = a+b=15
        System.out.println(a-=b); //13 a = a-b=13
        System.out.println(a*=b); //26 a=26
        System.out.println(a/=b); //13
        System.out.println(a%=b); //1        
        System.out.println(a=b); //2 a=2
        System.out.println(a==b); //true
    }
}



3. 关系运算符

布尔类型的值,要么是true,要么是false

== :连接基本数据类型,比较数值是否相等;连接引用数据类型,比较的是地址值

!= : 不等于

> ;<;>=;<=;

instanceof:   判断对象是否属于类  "hello" instanceof String  =====> true   此关系运算符只能用于引用数据类型

案列



class RelationOperatorDemo{
    public static void main(String[]args){
        int a = 15;
        int b = 2;
        System.out.println(a=b);//2
        System.out.println(a==b);//true
        System.out.println(a!=b);//false
        System.out.println(a>b);//false
        System.out.println(a<b);//false
        System.out.println(a>=b);//true
        System.out.println(a<=b);//true
        System.out.println("jh " instanceof String);//true
    }
}



 

4. 逻辑运算符

4.1 基本规则

逻辑运算符通常用来连接布尔类型的值

(1)& : AND(并且)      两个都是true 结果才是true              false&true = false

(2)| :OR(或者) 只要有一个是true,那么结果就是true       false|true = true

(3)^ :   XOR(异或) 不同为true, 相同为false                       true^true=false

(4)! 非: (取反)    !true = false

优先级: & 先于    先于   |

6>x>3 在java 中不能这么写, 要写成x>3 & x<6

案例



class LogicOperatorDemo{
    public static void main(String[] args){
        System.out.println((4>3)&(2!=1)); // true: true&true
        System.out.println((4>3)^(2==1));// true true^false
        System.out.println((4<3)|(2!=1));//true false|true
        System.out.println((4>=3)^(2!=1)&(2!=1));//false true^true&true
        System.out.println(!(2!=1));//false
    }
}



4.2 短路运算

(1)

&: 两个都是true, 结果就为true,不管前面运算的结果是什么,后面的表达式都进行运算

&&: 在连接两个布尔类型的表达式的时候,如果&& 前面的表达式的结果为false,那么其实已经可以确认整个表达式的结果就是false,短路运算符,后面就不在进行运算了

& 和&& 最终运算出来的结果是一致的

(2)

|: 只要有一个是true,结果就是true,不管前面表达式的结果如何,后面都进行运算

||: 短路或者. 如果前面的表达式结果为true,那么整个表达式的结果就为true,后面就不在运算了

案例



class LogicOperatorDemo2{
    public static void main(String[] args){
        int x = 3;
        int y = 4;
        System.out.println((x++ > 3) & (y++ > 4)); //false,&后面的代码也执行了,从后面打印显示的y值可以知道
        System.out.println(x);//4
        System.out.println(y);//5
    }
}



若代码变成如下(注释为运行结果),则



System.out.println((x++ > 3) && (y++ > 4));//false,由结果可知,&&后面的代码没有运行
System.out.println(x);//4
System.out.println(y);//4



同理符号“ | ”  也一样

4.3 连接数字

&|^ 除了可以连接布尔类型外,还可以用来连接整数,短路运算符不能连接数字. 在连接数字的时候,是针对二进制进行运算的, 将连接的数字转成二进制的补码,逐位进行运算, 把0 当做false ,把1 当做true
"~"  也是一个运算符,是把数字转成二进制的补码后逐位(包括符号位)取反

练习题:

a = 15, b=2 求a&b,a|b,a^b,~2



class LogicOperatorDemo3{
    public static void main(String[] args){
        int a = 15;
        int b = 2;
        System.out.println(a&b); //2
        System.out.println(a|b); //15
        System.out.println(a^b); //13
        System.out.println(~b); // -3
    }
}



解释如下

java中的加减乘除符号 java加减乘除运算代码括号_运算符

5 . 位运算符

针对二进制的补码做移位的操作
<<: 最高位丢弃,空位补0
>>: 空位补最高位
>>>: 无符号右移, 最高位补0

规律:
左移几位就相当于乘以2 的几次方
右移几位就相当于除以2 的几次方

 案例



class BitOperatorDemo{
    public static void main(String[] args){
        System.out.println(15>>2);// 3
        System.out.println(15<<2);// 60
    }
}



 

 6. 三目运算符

也称之为三元运算符
格式:
(关系表达式)?表达式1:表达式2;
 如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
 表达式1 和表达式2 的最终结果是一个明确的值(不能写输出语句)

 练习



/**
    1. 定义两个float 类型的变量, 返回最小值
    2. 定义一个int 类型的变量,如果这个数是偶数,就返回true, 否则返回false
    3. 定义两个long 类型变量,如果这两个数相等,就返回"相等",否则返回不相等
    4. 定义三个double 类型的变量,求出这三个数中的最大值
*/
class ThreeEyesTest{
    public static void main(String[] args){
    //1
    float f1 = 12.3F;
    float f2 = 56;
    float min = f1<f2?f1:f2;
    System.out.println(min);//12.3
    System.out.println(f1<f2?f1:f2);
    //2
    int a = 100;
    boolean bo = a%2==0?true:false;
    boolean bo1 = a%2==0;
    System.out.println(bo);//true
    //3
    long b1 = 100;
    long b2 = 200L;
    String result = b1==b2?"相等":"不相等";
    System.out.println(result);//不相等
    //4
    double d1 = 12.3;
    double d2 = 45;
    double d3 = 89.3;
    double temp = d1>d2?d1:d2;// 求前两个数中的最大值
    double max = temp >d3?temp:d3;// 再用前两个数中的最大值和第三个数比较,
    System.out.println(max);
    System.out.println(d1>d2?(d1>d3?d1:d3):(d2>d3?d2:d3));
    System.out.println(d1>d2&d1>d3?d1:d2>d3?d2:d3); //如果d1 大于d2 并且d1>d3,最大值就是d1,否则d1 不是最大值,最大值就在d2 和d3 中



嵌套练习

需求:
利用条件运算符的嵌套来完成此题:
学习成绩>=90 分的同学用A 表示,
80-89 分之间的用B 表示,
70-79 分以下的用C 表示,
60-69 分以下的用D 表示,
60 以下用E。



class StudentScoreSystem{
    public static void main(String[] args){
        int score = 69;
        String result = score>=90?"A":score>=80?"B":score>=70?"C":score>=60?"D":"E";
        System.out.println(result);
    }
}



 

二 . 键盘录入

1. 导包: import 全类名(包名+类名)这句话要放到class 的上面

    如: import java.util.Scanner

2. 创建Scanner 的对象
    Scanner 对象名(变量名) = new Scanner(System.in);

3. 使用对象获取键盘录入的信息:
    对象名.nextInt();             获得 int
    对象名.nextDouble()              double
    ....
    没有nextChar 这个方法
    对象名.nextLine();          获取字符串的

注意事项:

如果把nextLine 放到了nextInt(nextDouble.nextLong....) 的下面,就会导致nextLine 还未接收到内容就结束了
解决方案:

1. 把nextLine 放到nextInt(nextDouble.nextLong....) 上面
2. 可以使用next 替换nextLine



import java.util.Scanner;
class ScannerDemo{
    public static void main(String[] args){
        //2. 创建对象
        Scanner sc = new Scanner(System.in);
        //3 使用对象获取键盘录入的信息
        System.out.println("请输入您的年龄");
        int age = sc.nextInt();//如果输入的类型不是int,java.util.InputMismatchException
        System.out.println("请输入您的姓名");
        String name = sc.next();
        System.out.println("您好,"+name+",原来您的年龄是:"+age+",您好年轻啊");
    }
}



 

三 eclipse的使用