Java中的运算符

1、算数运算符

符号:+、-、*、/、%、++、–

//++:
//++a:先自增1,再使用
int a = 10;
System.out.println(++a);//11
System.out.println(a);//11
//b++:先使用,再自增1
int b = 10;
System.out.println(b++);//10
System.out.println(b);//11

//--:
//--c:先自减1,再使用
int c = 10;
System.out.println(--c);//9
System.out.println(c);//9
//d--:先使用,再自减1
int d = 10;
System.out.println(d--);//10
System.out.println(d);//9

特殊点1

byte类型做运算会先向上转型成int类型

注意:

  1. 自动转型使用最高位补位

  2. 强制转型从最高位开始舍弃

byte b1 = 10;
byte b2 = 20;

//b1 - byte:0000,1010
//	    int:0000,0000,0000,0000,0000,0000,0000,1010
//b2 - byte:0001,0100
//		int:0000,0000,0000,0000,0000,0000,0001,0100
//		int:0000,0000,0000,0000,0000,0000,0001,1110
//	 (byte):0001,1110
byte result = (byte)(b1 + b2);
System.out.println(result);

特殊点2

short类型做运算会先向上转型成int类型

short s1 = 10;
short s2 = 20;

//s1 - short:0000,0000,0000,1010
//	     int:0000,0000,0000,0000,0000,0000,0000,1010
//s2 - short:0000,0000,0001,0100
//		 int:0000,0000,0000,0000,0000,0000,0001,0100
//		 int:0000,0000,0000,0000,0000,0000,0001,1110
//	 (short):0000,0000,0001,1110

short result = (short)(s1 + s2);
		System.out.println(result);

特殊点3

byteshort类型做运算会先向上转型成int,其余数值型按照取值范围大的类型返回数据

byte b = 10;
short s = 10;
int i = 10;
long l = 10;
float f = 10;
double d = 10;

System.out.println(b + b);//结果的数据类型是:int
		System.out.println(b + s);//结果的数据类型是:int
System.out.println(b + i);//结果的数据类型是:int
System.out.println(i + l);//结果的数据类型是:long
System.out.println(i + f);//结果的数据类型是:float
System.out.println(l + f);//结果的数据类型是:float
System.out.println(l + d);//结果的数据类型是:double
System.out.println(f + d);//结果的数据类型是:double

特殊点4

++a;b++;没有区别,因为分号是执行语句的结束,不管先加还是后加都给加

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

int b = 10;
b++;
System.out.println(b);//11

特殊点5

int num = 10;
++num;//底层实现:num = (int)(num+1);
System.out.println(num);//11

特殊点6

char类型可以做运算

char c = 'a';//'a'的码值是97
int i = c+1;
System.out.println(i);//98

2、赋值运算符

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

经典面试题一:输出结果为?

int a, b; //一次性声明多个变量
a = b = 100;//将100赋值给b,再将b赋值给a
System.out.println(a); //100
System.out.println(b); //100
System.out.println(a==b);//true

经典面试题二:下面的两种写法结果分别是?

short s=1; 
s = s+1; //short和int做运算会向上转型成int,如果没有强转就会报错

short s=1; 
s += 1;//2

赋值规则:
s += 1 s = (short)((s) + (1))
复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型。

3、关系运算符

符号:==、!=、>、>=、<、<=

注意:
==判断两个值是否相等
!=判断两个值是否不相等
关系运算符的结果必须是boolean

boolean bool = 10 == 20;
System.out.println(bool);//false
System.out.println(10 != 20);//true
System.out.println(10 >  20);//false
System.out.println(10 >= 20);//false
System.out.println(10 <  20);//true
System.out.println(10 <= 20);//true

经典面试题一:输出结果为?

int x = 10;
int y = 10;
boolean flag = (x == y);
System.out.println(flag);//true
flag = (x = y);//会报错 -- 因为boolean类型不能与其他类型兼容
System.out.println(flag);

经典面试题二:输出结果为?

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

4、逻辑运算符

​ 知识点:逻辑运算符
​ 符号:
&&&短路与
|||短路或
^异或
!

注意:
​ 1.逻辑运算符运行结果都是boolean类型
​ 2.&、&&、|、||、^ 两侧都是boolean类型数据

&与:前后两侧都是boolean值,两侧都为true,结果才为true

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

&&短路与:前后两侧都是boolean值,两侧都为true,结果才为true

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

& vs &&
&与:判断前者为false后,还会判断后者
&&短路与:判断前者为false后,不会判断后者,直接返回false,所以效率更高
ArithmeticException - 算数异常

System.out.println(false && 10/0>3);

|或:前后两侧都是boolean值,两侧有为true,结果就为true

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

||短路或:前后两侧都是boolean值,两侧有为true,结果就为true

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

| vs ||
|或:判断前者为true后,还会判断后者
||短路或:判断前者为true后,不会判断后者,直接返回true,所以效率更高

System.out.println(true || 10/0>3);

^异或:前后两侧都是boolean值,两侧相同为false,不同为true

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

!非:置反

boolean bool1 = true;
System.out.println(!bool1);//false

boolean bool2 = false;
System.out.println(!bool2);//true

5、三目运算符

语法规则:变量 = (表达式)?值1:值2;

理解:表达式的结果必须是boolean
true - 将值1赋值给变量
false- 将值2赋值给变量

案例1:在控制台输入两个int类型的数据,判断大小,输出最大值

Scanner scan = new Scanner(System.in);

System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();

int max = (a>b)?a:b;//判断a是否大于b,如果成立就返回a,否则返回b
System.out.println("最大值为:" + max);

案例2:在控制台输入三个int类型的数据,判断大小,输出最大值

Scanner scan = new Scanner(System.in);

System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
System.out.println("请输入第三个数字:");
int c = scan.nextInt();

//解题思路:先判断前两个数字,再跟第三个数字比较
int max = (a>b)?a:b;
max = (max>c)?max:c;
System.out.println("最大值为:" + max);

案例3:在控制台输入二个int类型的数据,判断大小,输出最小值

Scanner scan = new Scanner(System.in);

System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();

int min = (a<b)?a:b;
System.out.println("最小值为:" + min);

案例4:在控制台输入三个int类型的数据,判断大小,由小到大输出

Scanner scan = new Scanner(System.in);

System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
System.out.println("请输入第三个数字:");
int c = scan.nextInt();

//最大值
int max = (a>b)?a:b;
max = (max>c)?max:c;

//最小值
int min = (a<b)?a:b;
min = (min<c)?min:c;

//中间值
int mid = a+b+c-max-min;

System.out.println(min + "<" + mid + "<" + max);

面试题1:

System.out.println((false)?10.9:9);//9.0

面试题2:

char x = 'x';//码值 - 120
int i = 10;
System.out.println(false?i:x);//120

面试题3:

char x = 'x';//码值 - 120
System.out.println(false?100:x);//x
System.out.println(false?100000:x);//120

扩展 - 常量:在程序执行过程中,不可发生改变的量
注意:数字字面量就是常量的一种

三目运算符返回值规则:
	1.值1和值2都是常量的情况,按照取值范围大的类型返回数据
	2.值1和值2都是变量的情况,按照取值范围大的类型返回数据
	3.值1和值2一个是常量一个是变量的情况,判断常量是否在变量所属类型的取值范围里
		在 - 按照变量类型返回数据
		不在-按照常量类型返回数据

6、位运算符

知识点:位运算符

理解:将十进制的数据转换为二进制做运算符

符号:
&与 |或 ^异或
<< 左移
>> 右移
>>> 无符号位右移

&与:同位比较,两者为1,结果才为1

byte b1 = 19;//0001,0011
byte b2 = 21;//0001,0101
         	 //0001,0001

//b1 - byte:0001,0011
//	    int:0000,0000,0000,0000,0000,0000,0001,0011
//b2 - byte:0001,0101
//		int:0000,0000,0000,0000,0000,0000,0001,0101
//		int:0000,0000,0000,0000,0000,0000,0001,0001
//	 (byte):0001,0001
byte result = (byte)(b1 & b2);
System.out.println(result);//17 - 0001,0001

|或:同位比较,两者有1,结果就为1

int i1 = 19;//0000,0000,0000,0000,0000,0000,0001,0011
int i2 = 21;//0000,0000,0000,0000,0000,0000,0001,0101
            //0000,0000,0000,0000,0000,0000,0001,0111
System.out.println(i1 | i2);//23

^异或:同位比较,两者不同为1,相同为0

int i1 = 19;//0000,0000,0000,0000,0000,0000,0001,0011
int i2 = 21;//0000,0000,0000,0000,0000,0000,0001,0101
            //0000,0000,0000,0000,0000,0000,0000,0110
System.out.println(i1 ^ i2);//6

注意:
&、|、^前后两侧是数值,该符号为位运算符
&、|、^前后两侧是布尔值,该符号为逻辑运算符

<<左移:整体向左移动n位,就用n个0补位(补到最低位)

==注意:==左移一位相等于乘2

int i = 1024;//0000,0000,0000,0000,0000,0100,0000,0000
             //0000,0000,0000,0000,0001,0000,0000,0000
System.out.println(i << 2);//4096

>>右移:整体向右移动n位,就用n个最高位/符号位补位(补到最高位)

==注意:==右移一位相等于除2

int a = 1024;//0000,0000,0000,0000,0000,0100,0000,0000
             //0000,0000,0000,0000,0000,0001,0000,0000
System.out.println(a >> 2);//256
int b = -1024;//1111,1111,1111,1111,1111,1100,0000,0000
              //1111,1111,1111,1111,1111,1111,0000,0000
System.out.println(b >> 2);//-256

>>>无符号位右移:整体向右移动n位,就用n个0补位(补到最高位)

注意:>>>>>在处理正数的情况下没有区别

int c = 1024;//0000,0000,0000,0000,0000,0100,0000,0000
             //0000,0000,0000,0000,0000,0001,0000,0000
System.out.println(c >> 2);//256
int d = -1024;//1111,1111,1111,1111,1111,1100,0000,0000
              //0011,1111,1111,1111,1111,1111,0000,0000
System.out.println(d >>> 2);//1073741568

面试题:描述下列代码运行结果

==考点:==char类型的取值范围没有负数,向上转型是用0补位

//-1 - int:1111,1111,1111,1111,1111,1111,1111,1111
//    byte:1111,1111
//	  char:1111,1111,1111,1111
//	   int:0000,0000,0000,0000,1111,1111,1111,1111
System.out.println((int)(char)(byte)-1);//65535

7、Scanner类

理解:Scanner是Java提供的专门用于在控制台输入数据的类

//导包
import java.util.Scanner;

public class Test06{
	/**	
		知识点:Scanner类
		理解:Scanner是Java提供的专门用于在控制台输入数据的类
	*/
	public static void main(String[] args){
	
		//创建Scanner类的对象
		//人类 光头强 = 新建 人类();
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入int类型的数据:");
		int i = scan.nextInt();//用户可以在控制台输入数据,并把数据赋值给i
		
		System.out.println("请输入double类型的数据:");
		double d = scan.nextDouble();
	
		System.out.println("请输入字符串类型的数据:");
		String str = scan.next();

		System.out.println(i);
		System.out.println(d);
		System.out.println(str);
		
		//错误示范:Scanner没有输入字符的功能
		//System.out.println("请输入字符类型的数据:");
		//char c = scan.nextChar();
		//System.out.println(c);
	}
}
  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖把湛屎,戳谁谁死

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值