第二章---Java基本语法(上)

一、运算符

|-作用:数据的运算、赋值和比较
|-分类:
|-算术运算符
|-赋值运算符
|-比较运算符(关系运算符)
|-逻辑运算符
|-位运算符
|-位运算符
在这里插入图片描述例:

class AriTest {
    public static void main(String[] args) {
        //除号:/
        int num1 =12;
        int num2 = 5;
        int result1 = num1 / num2;
        System.out.println(result1);//2
        
        int result2 = num1 / num2 * num2;
        System.out.println(result2);//10

        double result3 = num1 / num2;
        System.out.println(result3);//2.0

        double result4 = num1 / num2 + 0.0;//2.0
        double result5 = num1 / (num2 + 0.0);//2.4
        double result6 = (double)num1 / num2;//2.4
        double result7 = (double)(num1 / num2);//2.0
        System.out.println(result5);
        System.out.println(result6);
        System.out.println(result7);


        // %:取余运算
        //结果的符号与被模数的符号相同
        //开发中,经常使用%来判断能否被除尽的情况
        int m1 = 12;
        int n1 = 5;
        System.out.println("m1 % m2:" + m1 % n1);


        int m2 = -12;
        int n2 =5;
        System.out.println("m2 % n2:" + m2 % n2);


        int m3 = 12;
        int n3 = -5;
        System.out.println("m3 % n3:" + m3 % n3);


        int m4 = -12;
        int n4 = -5;
        System.out.println("m1 % n1:" + m1 % n1);


        //(前)++:先自增1,后运算
        //(后)++:先运算,后自增1
        int a1 = 10;
        int b1 = ++a1;
        System.out.println(" a1 = " + a1 + ", b1 " + b1);


        int a2 = 10;
        int b2 =a2++;
        System.out.println(" a2 = " + a2 + ", b2 " + b2);


        int a3 = 10;
        ++a3;//a3++;
        int b3 = a3;

        //注意点:
        short s1 = 10;
        //s1 = s1 + 1;//编译失败
        //s1 = (short)(s1 + 1);//正确的
        s1++;//自增1不会改变本身变量的数据类型
        System.out.println(s1);

        //问题:
        byte bb1 = 127;
        bb1++;
        System.out.println("bb1" + bb1);


        //(前)--:先自减1,后运算
        //(后)--:先运算,后自减1
        int a4 = 10;
        int b4 = a4--;//int b4 = --a4;
        System.out.println("a4 = "+ a4 +",b4 = "+ b4);//9,10

    }
}

二、赋值运算符

|-符号:=
|-当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理
|-支持连续赋值
|-扩展赋值运算符:+=,-=,*=,/=,%=
例:使用赋值运算符

class SetValue {
    public static void main(String[] args) {
        //赋值符号:=
        int i1 = 10;
        int j1 = 10;


        int i2 , j2;
        //连续赋值
        i2 = j2 = 10;


        int i3 = 10,j3 = 20;


        //**********************
        int num1 = 10;
        num1 += 2;//num1 = num1 + 2
        System.out.println(num1);//12


        int num2 = 12;
        num2 %= 5;//num2 = num2 % 5
        System.out.println(num2);//2


        short s1 = 10;
        //s1 = s1 + 2;//编译失败
        s1 += 2;//不会改变变量本身的数据类型
        System.out.println(s1);//12


        //实现+2操作的几种办法
        //方式一:num = num + 2;
        //方式二:num += 2;(推荐)


        //实现+1操作的几种办法(int num = 10;)
        //方式一:num = num + 1;
        //方式二:num += 1;
        //方式一:num++;(推荐)

    }
}

三、比较运算符

|-结果都是boolean型,要么是true,要么是false
|-“==”不能写成“=”
在这里插入图片描述

class CompareTest {
    public static void main(String[] args) {
        int i = 10;
        int j = 20;
        System.out.println(i == j);//false
        System.out.println(i = j);//20


        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b2 == b1);//false
        System.out.println(b2 = b1);//true
    }
}

四、逻辑运算符

&:逻辑与、|:逻辑或、!:逻辑非
&&:短路与、||:短路或 、^:逻辑异或
在这里插入图片描述
|-操作的都是boolean类型的变量
例:&、&&与|、||



class LogicTest {
    public static void main(String[] args) {
        //区分:&、&&
        //相同点1:&、&&运算结果相同
        //相同点2:当符号左边是true时,二者都会执行符号右边的运算
        //不同点:当符号左边是false时,&继续执行符号右边的运算,&&不再执行符号右边的运算
        //推荐使用&&
        boolean b1 = true;
        b1 = false;
        int num1 = 10;
        if(b1 & (num1++) > 0){
            System.out.println("我现在在北京");
            
        }else{
            System.out.println("我现在在南京");
        }
        System.out.println("num1 = "+num1);
        
        boolean b2 = true;
        b2 = false;
        int num2 = 10;
        if(b1 && (num2++) > 0){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
        }
        System.out.println("num2 = "+num2);


        //区分:|、||
        //相同点1:|、||运算结果相同
        //相同点2:当符号左边是false时,二者都会执行符号右边的运算
        //不同点:当符号左边是true时,|继续执行符号右边的运算,||不再执行符号右边的运算
        //推荐使用||
        boolean b3 = false;
        b3 = true;
        int num3 = 10;
        if(b3 | (num3++ > 0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
        }
        System.out.println("num3 = "+num3);

        boolean b4 = false;
        b4 = true;
        int num4 = 10;
        if(b4 || (num4++ > 0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
        }
        System.out.println("num4 = "+num4);
    }
}

五、左移右移位运算符

在这里插入图片描述
|-位运算是直接对整数的二进制进行的运算
|-操作的都是整型的数据
|-<<:在一定范围内每向左移一位,相当于*2
|->>:在一定范围内,每向右移一位,相当于/2
面试题:最高效的2 * 8?
答:2 << 3、8 << 1
例:

class  BitTest{
	public static void main(String[] args) {
		int i = 21;
		i = -21;

		System.out.println("i << 2:"+(i << 2));
		System.out.println("i << 3:"+(i << 3));
		System.out.println("i << 27:"+(i << 27));

		int m = 12;
		int n = 5;
		System.out.println("m & n:"+(m & n));
		System.out.println("m | n:"+(m | n));
		System.out.println("m ^ n:"+(m ^ n));

		//交换两个变量的值
		int num1 = 10;
		int num2 = 20;
		System.out.println("num1:"+num1+",num2:" + num2);

		//方式一:定义临时变量的方式
		//int temp = num1;
		//num1 = num2;
		//num2 = temp;
		//System.out.println("num1:"+num1+",num2:" + num2);

		//方式二:好处:不用定义临时变量 
		//        弊端:1.相加操作可能超出存储范围 2.有局限性,只能适用于数值类型
		//num1 = num1 + num2;
		//num2 = num1 - num2;
		//num1 = num1- num2;
		//System.out.println("num1:"+num1+",num2:" + num2);

	    //方式三:使用位运算符
		//有局限性,只能适用于数值类型
		num1 = (num1 ^ num2);
		num2 = num1 ^ num2;
		num1 = num1 ^ num2;
		System.out.println("num1:"+num1+",num2:" + num2);
	}
}

六、三元运算符

|-格式:条件表达式?表达式1:表达式2

为true:运算后的结果表达式式1;为false,运算后的结果表达式是2;
说明
|-结果为boolean类型的变量
|-根据条件表达式的真或将假,决定执行表达式1,还是表达式2
|-表达式1和表达式2要求是一致的
|-三元运算符可以嵌套使用
|-凡是可以使用三元运算符的地方,都可以改写为if-else,反之,不成立
|-如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符,原因:简洁,执行效率高
例:

class SanYuanTest {
    public static void main(String[] args) {
        //获取两个整数的最大值
        int m = 12;
        int n = 5;


        int max = (m > n)?m : n;


        double num = (m > n)?2 : 1.0;


        System.out.println("max: "+ max);


        System.out.println("num: "+ num);
        //*************************************


        String MaxString = (m > n)?"m大" :"n大";


        System.out.println("MaxString: "+ MaxString);


        //***************************************
        String maxString = (m > n)?"m大" :((m == n)?"m和n相等" : "n大");
        System.out.println("maxString: "+ maxString);

        //获取三个数的最大值
        int n1 = 12;
        int n2 = 30;
        int n3 = -43;

        int max1 = (n1 > n2)?n1 : n2;
        int max2 = (max1 > n3)?max1 : n3;
        System.out.println("三个数中的最大值为: "+ max2);

        int max3 = (((n1 > n2)?n1 : n2 )> n3)?((n1 > n2)?n1 : n2 ): n3;
        System.out.println("max3: " + max3);


        //改写成if-else
        if(m > n){
            System.out.println(m);
        }eles{
            System.out.println(n);
        }
    }
}

七、运算符的优先级

|-优先级指的是表达式运算中的运算顺序
|-只有单目运算符、三元运算符、赋值运算符是从右到左运算的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值