JAVA学习(3)

本文详细介绍了Java中的各种运算符,包括算数运算、关系运算、逻辑运算、位运算、增量运算、条件运算以及运算符的优先级,帮助初学者理解和掌握Java的基本语法。
摘要由CSDN通过智能技术生成

初识 Java

运算符

1.算数运算符

1.基本运算符:加减乘除模(+ - * / %)
int a = 2;
int b = 1;
system.out.println(a + b);
system.out.println(a - b);
system.out.println(a * b);
system.out.println(a / b);
system.out.println(a % b);//求余数

以上都是二元运算符
注: int/int 结果还是int类型,而且会向下取整

–除

int a = 1;
int b = 2;
System.out.println(a/b);//小数部分不会保存,结果位0
System.out.println(1/0);

运行结果:
在这里插入图片描述

以 0 作为除数,编辑器会报出 异常 (异常分为两类: 1.受查异常;2.非受查异常).
这里的 ‘ArithmeticException’ 异常为 算数异常
并给出出错的位置在 第m行.

–模

		/* int a = 1;
        int b = 2;
        System.out.println(a/b);//小数部分不会保存,结果位0
        System.out.println(1/0);*/
        //多行注释快捷键 : ctrl + shift + /
        //单行注释 : ctrl + /
        System.out.println(7 % 3);// 1
        System.out.println(7 % -3);// 1
        System.out.println(-7 % 3);// -1
        System.out.println(-7 % -3);// -1

		System.out.println(15.5 % 2.0);// 1.5
		//在 C语言中 此处会报错,但是在java中此处允许计算.

被模数 < 0 ,则余数 < 0;
被模数 > 0 ,则余数 > 0;

2.增量运算符
        //自增运算
        int a = 1;
        a += 2;//a = a + 2
        System.out.println(a);
        
        //不同类型的增量运算
        long b = 10L;
        int i = 3;
        i += b;
        System.out.println(i);    

在不同类型进行增量运算时,输出会是怎样的?

运行结果:

在这里插入图片描述
令人疑惑的是,这里并没有报错
难道这里进行了整型提升?亦或是 截断…

我们可以用以下代码进行核验 是否是进行了提升

        byte b1 = 1;
        byte b2 = 127;
        b2 += b1;
        System.out.println(b2);

若打印出了128, 则进行了提升

(提升 :
1.如果参与运算的两个操作数类型不同,那么较低精度的整数类型会被提升为较高精度的整数类型。
例如,将一个int类型的变量与一个short类型的变量相加,那么short类型的变量会被提升为int类型。

2.如果参与运算的操作数有一个是有符号的,另一个是无符号的,那么有符号的操作数会被转换为无符号类型,并且结果也是无符号类型。
例如,将一个有符号的int类型变量与一个无符号的unsigned int类型变量相加,那么有符号的int类型会被转换为无符号类型。)

若不是128, 则进行了截断

(截断指的是当进行不同类型之间的计算或操作时,结果可能会被截断为一种较低精度或较小范围的类型。这通常发生在将一个较高精度或较大范围的值赋给一个较低精度或较小范围的变量时。)

运行结果:

在这里插入图片描述
所以 不同类型的增量运算,是发生了截断(存不下了).
在这里插入图片描述

3.自增/自减运算符
        int a1 = 10;
        int a2 = 10;
        int b = a1++;
        System.out.println(b);

        int c = ++a2;
        System.out.println(c);

运行结果:
在这里插入图片描述
认清 前置++ 与 后置++ 的区别

了解下面的代码

        int a = 10;
        a = a++;
        System.out.println(a);

运算结果:
在这里插入图片描述
出人意料,竟然是 10
但是在C语言中,这个程序的答案又为 11.
原因是不同程序的汇编代码不同, 这里不做深入,了解即可.

注:
1.若单独使用,则无差别;
2.若混合使用,增量与赋值的顺序要摸清楚;
3.只有变量才可使用自增/自减,常量不能使用,因为常量不允许被修改.

2.关系运算符

//关系运算符
        int a = 10;
        int b = 20;
        System.out.println(a == b);// false
        System.out.println(a != b);// true
        System.out.println(a < b);// true
        System.out.println(a > b);// false
        System.out.println(a <= b);// true
        System.out.println(a >= b);// false

关系运算符输出,只有 false 与 true 两种

3.逻辑运算符(重点)

运算结果都为 boolean类型

1.逻辑与 &&

见 假 即 假

		int a = 1;
        int b = 2;
        System.out.println(a == 1 && b == 2);//true
        System.out.println(a == 1 && b > 100);//false
        System.out.println(a > 100 && b == 2);//false
        System.out.println(a > 100 && b > 100);//false

短路与
只要表达式1 为假 则不会执行 表达式2

System.out.println(10 > 20 && (10/0 == 0));//这里被短路,则不会出现报错
2.逻辑或 ||

见 真 即 真

        int a = 1;
        int b = 2;
        System.out.println(a == 1 || b == 2);//true
        System.out.println(a == 1 || b > 100);//true
        System.out.println(a > 100 || b == 2);//true
        System.out.println(a > 100 || b > 100);//false

短路或
只要表达式1 为真 则不会执行 表达式2

System.out.println(10 < 20 || (10/0 == 0));//这里被短路,则不会出现报错

单个 逻辑与 & 和 逻辑 或 | == && / ||
但不能体现短路与 和 短路或

		System.out.println(10 > 20 & (10/0 == 0));//程序异常
        System.out.println(10 < 20 | (10/0 == 0));//程序异常
3.逻辑非 !

逻辑非同样 需要 适配上 布尔表达式

int a = 10;
System.out.println(!a);//程序报错
boolean flg = true;
System.out.println(!flg);//false

4.位运算符

1.按位与 &

对应位上是1 则是1

//按位与 &
0101 1011
0011 0101
---------
0001 0001
2.按位与 |

对应位上有1 则是1

//按位或 |
0010 1011
0001 1110
---------
0011 1111
3.按位异或 ^

不一样的地方 则是1(找不同)

//按位异或 ^
0011 1011
0011 0001
---------
0000 1010

可得
n ^ n = 0
0 ^ n = n

例 : 1 ^ 2 ^ 3 ^ 2 ^ 1
解 : 原式 = 1 ^ 1 ^ 2 ^ 2 ^ 3
= 0 ^ 0 ^ 3
=3
按位异或 满足交换律

4.按位取反 ~

如果该位是 0 则转为 1,如果该为是 1 则转为 0.

0110 0101 --> ~
----------
1101 1010

5.移位运算(了解)

左移 : <<
右位补零

0000 1010   << 1  --->  0001 0100  22 (11*2^1)
0000 1011   << 2  --->  0010 1100  44 (11*2^2)

右移 : >>
左位补符号位

0000 1011   >> 1  --->  0000 0101  5 (11/2^1)
0000 1011   >> 2  --->  0000 0010  2 (11/2^2)

-1:
1111 1111   >> 1  --->  1111 1111 -1

无符号位右移
最右侧位不要了,最左侧 补 0

-1:
1111 1111   >>> 1 ---> ?

以下代码

        int a = -1;
        System.out.println(a >>> 1);

运行结果

2147483647

但是没有 无符号左移 : <<<
因为无符号左移和 普通的 左移,没有任何区别,没有意义

6.条件运算符(三目运算符)

表达式1 ? 表达式2 : 表达式3
表达式1 为真 执行 表达式 2,为假 执行 表达式 3

        int a = 10;
        int b = 20;
        int max = a > b ? a : b;
        // a > b ? a : b;此代码报错,因为三目运算符不能单独存在
        System.out.println(max);//20
        boolean flg = true == true ? true : true == false ? false : false;
        System.out.println(flg);

表达式
在这里插入图片描述
运行结果:

true
        boolean flg2 = true == false ? true : true == false ? false : false;
        System.out.println(flg2);

在这里插入图片描述

运行结果:

false

7.运算符的优先级

想要怎样 加括号即可

  • 47
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值