• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

java入门—–运算符

互联网 diligentman 3小时前 1次浏览

java入门—–运算符

拓展:Scanner类的使用

含义:Java给我们提供的一个类,这个类的功能就是在控制台输入数据

//创建Scanner类的对象
Scanner scan = new Scanner(System.in);
//调用功能
int i1 = scan.nextInt();//在控制台输入一个int数据
int i2 = scan.nextInt();//在控制台输入一个int数据
double d = scan.nextDouble();//在控制台输入一个double数据
String str = scan.next();//在控制台输入一个String数据

1. 算数运算符:

+、-、*、/ :加减乘除;

++ :表示自加1,即在自身的基础上加1;

– :表示自减1,即在自身的基础上减1;

% :求余数,例如10%3=1;

1.经典面试题

int a = 8;
int b = (a++)+(++a)+(a*10);
System.out.println(b);//8+10+100=112
int  i =  0 ;   
i = ++i; 
System.out.println(i);//i=1
/*底层实现:
i = (int)(i+1); 
i=i;
*/
int i = 0;   
i = i++;  
System.out.println(i); //i=0
/*底层实现:
int temp = i;
i = (int)(i+1);
i = temp;
*/

拓展:

i++与i=i+1有何区别?

byte i=1;
i++;//正常运行,i=1+1=2;
i=i+1;//报错,数据转换

/*
代码中出现的整数会被默认为int型,i++的底层运算为:
i = (byte)(i+1);会根据左侧变量类型自动进行强制转换。
i = i + 1;i+1的结果为int型,在赋值给byte型的i时,就会出现类型不兼容而报错。
*/

2.赋值运算符:

= :赋值,即将右边的值赋值给左边的变量;

+=、-=、 *=、/= 、 %= :复合赋值;

例如:

int a=10;
a+=10;  //  a = a+10
a-=10;  //  a = a-10
a*=10;  //  a = a*10
a/=10;  //  a = a/10
a%=10;  //  a = a%10

经典面试题

int a,b; 
a = b = 100;//100赋值给b,b再赋值给a;
System.out.println(a); //100
System.out.println(b);//100
short s=1; 
s = s+1; //数据转换错误

short s=1; 
s += 1;//s = (short)(s+1);s=2;
/*
代码中出现的整数会被默认为int型,s += 1的底层运算为:
s = (short)(s+1);会根据左侧变量类型自动进行强制转换。
s = s+1;s+1的结果为int型,在赋值给short型的s时,就会出现类型不兼容而报错。
*/

赋值规则:

复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型。

3.关系运算符:

== :等于

!= 不等于、>大于、 <小于、 >=大于或等于、 <=小于或等于

注意:

  1. 关系运算符的结果都是boolean类型,true或者 false
  2. 不要将 == 用成 =

经典面试题

int x = 10;
int y = 10;
boolean flag = (x == y);
System.out.println(flag);//true
flag = (x = y);//x,y是int型,flag是Boolean型,Boolean类型不能与其他类型兼容,这里会报错
System.out.println(flag);
boolean b1 = true;
boolean b2 = false;
boolean b3 = (b1 == b2);
System.out.println(b3);//false
boolean b4 = (b1 = b2);//b2赋值给b1,b1再赋值给b4
System.out.println(b4);//false

4.三目运算符/三元运算符

语法:

数据类型 变量 = (表达式)?值1:值2;

​ 例如:

​ int max = (a>b)?a:b;

理解:

​ 表达式的结果必须是boolean类型
​ true – 将值1赋值给变量
​ false- 将值2赋值给变量

案例:在控制台输入两个int类型的数字,输出最大值

//创建Scanner类的对象scan
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);

5. 逻辑运算符:

&(与)、&&(短路与)、|(或) 、||(短路或)、!(非)、^(异或)

规则:

& 和 && 规则: 两个有一侧为false,结果为false

| 和 || 规则 :两侧有一侧为true,结果为true

^ 规则: 两侧相同为false,不同为true

!规则:置反,false变成true , true变成false

注意:

1.逻辑运算符运行结果都是boolean类型

2.&、&&、|、||、^ 两侧都是boolean类型数据


//&与:前后两者都是boolean值,同时成立(true),结果才为true
System.out.println(true & true);//true
System.out.println(true & false);//false
System.out.println(false & true);//false
System.out.println(false & false);//false

//&&短路与:前后两者都是boolean值,同时成立(true),结果才为true
System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && true);//false
System.out.println(false && false);//false

//& vs &&
//&:判断前者为false后,才会判断后者
//&&:判断前者为false后,不会判断后者,所以效率更高
//ArithmeticException - 算数类异常
System.out.println(false && 10/0>5);

//|或:前后两者都是boolean值,有一个成立(true),结果就为true
System.out.println(true | true);//true
System.out.println(true | false);//true
System.out.println(false | true);//true
System.out.println(false | false);//false

//||短路或:前后两者都是boolean值,有一个成立(true),结果就为true
System.out.println(true || true);//true
System.out.println(true || false);//true
System.out.println(false || true);//true
System.out.println(false || false);//false

//| vs ||
//|:判断前者为true,还会判断后者
//||:判断前者为true,不会判断后者,所以效率更高
System.out.println(true || 10/0>5);

//^异或:前后两者都是boolean值,相同为false,不同为true
System.out.println(true ^ true);//false
System.out.println(true ^ false);//true
System.out.println(false ^ true);//true
System.out.println(false ^ false);//false

//!非 - 置反
boolean bool1 = true;
System.out.println(!bool1);//false

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

6.字符串拼接符

+两侧都是数值,此符号为算术运算符

int a=1,b=1,c=1;

a = b + c;
a = 1 + 2;

+有一侧或者两侧是字符串,此符号为字符串拼接符

System.out.println(1+2+"abc" + "def" +1+2);//3abcdeef12

7.位运算符:

&(与) 、|(或)、^(异或)、’<<’ (左移)、’>>’(右移)、’>>>’(无符号位右移)

含义:将十进制的数据转换为二进制再进行运算

//&:同位比较,两者为1,结果才为1
byte b1 = 23;//0001,0111
byte b2 = 25;//0001,1001
//23 byte - 0001,0111
byte result = (byte)(b1 & b2);
System.out.println(result);//17 - 0001,0001

//|:同位比较,两者有1,结果就为1
byte b1 = 23;//0001,0111
byte b2 = 25;//0001,1001
         //0001,1111
System.out.println(b1 | b2);//31 - 0001,1111

//^:同位比较,两者相同为0,不同为1
byte b1 = 23;//0001,0111
byte b2 = 25;//0001,1001
             //0000,1110
System.out.println(b1 ^ b2);//14 - 0000,1110

//  &、|、^:前后两者都是数值,该符号为位运算符
//  &、|、^:前后两者都是boolean值,该符号为逻辑运算符

//<<:整体向左移动n位,就用n个0补位
byte b1 = 10;//0000,1010
//10 byte:0000,1010
System.out.println(b1 << 2);
//10  int:0000,0000,0000,0000,0000,0000,0000,1010
//40  int:0000,0000,0000,0000,0000,0000,0010,1000

//>>:整体向右移动n位,就用n个最高位补位
byte b1 = 10;//0000,1010
//10 byte:0000,1010
System.out.println(b1 >> 2);
//10  int:0000,0000,0000,0000,0000,0000,0000,1010
//2	  int:0000,0000,0000,0000,0000,0000,0000,0010

byte b2 = -10;//1111,0110
//-10 byte:1111,0110
//-10  int:1111,1111,1111,1111,1111,1111,1111,0110
//-3   int:1111,1111,1111,1111,1111,1111,1111,1101
System.out.println(b2 >> 2);

//>>>:整体向右移动n位,就用n个0补位
byte b1 = 10;//0000,1010
//10 byte:0000,1010
//10  int:0000,0000,0000,0000,0000,0000,0000,1010
//2		 :0000,0000,0000,0000,0000,0000,0000,0010
System.out.println(b1 >>> 2);

byte b2 = -10;//1111,0110
//-10 byte:1111,0110
//-10  int:1111,1111,1111,1111,1111,1111,1111,0110
//1073741821:0011,1111,1111,1111,1111,1111,1111,1101
System.out.println(b2 >>> 2);

//注意:>> 和 >>> 如果是操作正数,效果是一样的

8.表达式

5+6:算数表达式

5>6:关系表达式

5|6:位运算表达式

9.运算符的优先级

经验:不用记,灵活运用小括号

优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ – 从右到左
3 * / % 从左到右
4 +(加) -(减) 从左到右
5 << >> >>> 从左到右
6 < <= > >= instanceof 从左到右
7 == != 从左到右
8 &(按位与) 从左到右
9 ^ 从左到右
10 | 从左到右
11 && 从左到右
12 || 从左到右
13 ?: 从右到左
14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 从右到左

10.转义字符

含义:具有特殊意义的字符本身
n:表示换行

" 表示一个双引号

’ 表示一个单引号

\ 表示一个斜杠

t 表示水平制表 :使输出的语句对称

System.out.print("今天不上课n");
System.out.print("今天不上课n");
System.out.println("小明说:"今天不上课"");
System.out.println("小明说:'今天不上课'");
System.out.println("小明说:\今天不上课\");
System.out.println("3*3=9t3*4=12t3*5=15");
System.out.println("4*3=12t4*4=16t4*5=20");
今天不上课
今天不上课
小明说:"今天不上课"
小明说:'今天不上课'
小明说:今天不上课
3*3=9   3*4=12  3*5=15
4*3=12  4*4=16  4*5=20

程序员灯塔
转载请注明原文链接:java入门—–运算符
喜欢 (0)