Java运算符

运算符(operator)

Java 支持如下运算符:

  • 算术运算符: +,-,*,/,%,++,--

  • 赋值运算符 = 关系运算符: >,<,>=,<=,==,!= instanceof

  • *逻辑运算符: &&,||,!

  • *位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)

  • *条件运算符 ?:

  • 扩展赋值运算符:+=,-=,=,/=


 

1、二元运算符

有两个操作数的叫二元运算符

 public class Demo01 {
     public static void main(String[] args) {
         // 二元运算符
         //Ctrl + D : 复制当前行到下一行
         int a = 10;
         int b = 20;
         int c = 25;
         int d = 25;
 
         System.out.println(a+b); //30
         System.out.println(a-b); //-10
         System.out.println(a*b); //200
         System.out.println(a/b); //0 10除20明明等于0.5,这里的结果是int类型,0.5是double类型,所以小数点直接被截掉了
         System.out.println(a/(double)b); //0.5 正确写法,一定要注意作用范围
 
    }
 }

整数运算和浮点运算

整数运算

如果两个操作数有一个为Long, 则结果也为long 没有long时,结果为int。即使操作数全为shot,byte,结果也是int.

浮点运算

如果两个操作数有一个为double, 则结果为double. 只有两个操作数都是float, 则结果才为float.

【演示】

 public class Demo02 {
     public static void main(String[] args) {
         long a = 123123123123123L;
         int b = 123;
         short c = 10;
         byte d = 8;
         double e = 1.5;
         System.out.println(a+b+c+d); //long类型
         System.out.println(b+c+d);  //Int类型
         System.out.println(c+d);    //Int类型
         System.out.println(a+c+d+e); //double类型
         /*
         如果多个操作数中有一个数为long类型,则最终结果也一定是Long类型的
         没有Long时,所有非int类型转为Int类型,即操作数全为shot,byte,结果也是int.
         如果有double,则运算结果也为double
         */
    }
 }

 

关系运算符

返回结果为布尔值!(ture或false)

 public class Demo03 {
     public static void main(String[] args) {
         // 关系运算符返回的结果: 正确, 错误 布尔值
         //跟if一起用
 
         int a = 10;
         int b = 20;
         
         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(a==b); //false
         System.out.println(a!=b); //true
    }
 }

 

2、取模运算

取模就是以前学的取余 如10%3 余 1

要点:

负数%负数=负数;

负数%正数=负数;

正数%负数=正数;

 public static void main(String[] args) {
 System.out.println(9 % 4); //1
 System.out.println(-9 % -4); //-1
 System.out.println(-10 % 4); //-2
 System.out.println(9 % -4); //1
 }

3、一元运算符

自增(++)自减(--)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算, 而自增自减运算符是一个操作数,分为前缀和后缀两种。

 public class Demo04 {
     public static void main(String[] args) {
         //一元运算符
         //++ 自增
         //-- 自减
         int a = 3;
         int b = a++;    //执行完这行代码后,b=3。先给b赋值,a再自增
         //a++ 相当于隐藏了a = a + 1,先执行完,a再+1
         System.out.println(a); //4
 
         //++a 相当于隐藏了a = a + 1,a先+1,再执行
         int c = ++a;    //执行完这行代码后,c=5。a先自增,再给b赋值
 
         System.out.println(a); //5
         System.out.println(b); //3
         System.out.println(c); //5
    }
 }

Java中的乘幂处理

 public static void main(String[] args) {
 int a = 3^2; //java中不能这么处理, ^是异或符号。
 double b = Math.pow(3, 2);
 }

Math类提供了很多科学和工程计算需要的方法和常数。特殊的运算都需要运用到方法!

4、逻辑运算符

逻辑与:&&和&

逻辑或:||和|

逻辑非:!

【演示】

 //逻辑运算符 (与 或 非)
 public class Demo05 {
     public static void main(String[] args) {
         boolean a = true;
         boolean b = false;
 
         System.out.println("a && b:"+(a && b)); //逻辑与运算:两个变量都为真,结果才为真(true)
         System.out.println("a || b:"+(a || b)); //逻辑或运算:两个变量有一个为真,结果才为真(true)
         System.out.println("!(a && b):"+!(a && b)); //逻辑非运算:如果是真,则变为假,如果是假,则变为真

短路运算

逻辑与和逻辑或采用短路的方式。从左到右计算,如果确定值则不会再计算下去。在两个操作数都为 true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断 第二个操作了。

 //短路运算
         int c = 5;
         boolean d = (c<4)&&(c++<4); //(c<4)已经是假false的,所以与运算&&后面的(c++<4)执行
         System.out.println("===============================================");
         System.out.println(d); //false
         System.out.println(c); //输出结果为5,说明c++没有执行
  }
 }
 /*
 解析: 该程序使用到了短路逻辑运算符(&&),首先判断 a<4 的结果为 false,则 d 的结果必定是 false,所以不再执行第二个操作 a++<4 的判断,所以 a 的值为 5。
 */

逻辑与只要有一个为false, 则直接返回false.

逻辑或只要有一个为true, 则直接返回true;

5、位运算符

位运算符作用在所有的位上,并且按位运算。


//位运算(计组学过)
public class Demo06 {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
---------------------------------
A&B 0000 1100 (与)
A|B 0011 1101 (或)
A^B 0011 0001 (异或)
~B 1111 0010 (取反)
*/

/*
面试题:2*8怎么运算最快?
可将其拆分成 2*2*2*2
<< 左移 相当于*2 二进制往左移
>> 右移 相当于/2 二进制往右移
*/
System.out.println(2<<3);

/*
解析:
2*8相当于2*2*2*2 相当于二进制数0000 0010把1左移3位
得0001 0000就是十六
*/

}
}

6、扩展运算符

【演示】

public static void main(String[] args) {
int a=10;
int b=20;
a+=b; // a = a + b
System.out.println(a+":"+b);
}

7、字符串连接符

“+” 运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串 然后再进行连接。

public class Demo07 {
public static void main(String[] args) {
int a =10;
int b =20;

a+=b; //a = a+b
a-=b; //a = a-b

System.out.println(a); //10

//字符串连接符 + , String
System.out.println(a+b); //30
System.out.println(""+a+b); //输出1020,""是string类型 字符串在前面,后面的会拼接
System.out.println(a+b+""); //输出30,这个是面试题! 字符串在后面,运算依然执行

}
}

8、三目条件运算符

三目条件运算符,语法格式:

 x ? y : z

其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整 个运算结果为表达式z的值。

//三元运算符
public class Demo08 {
public static void main(String[] args) {
// x ? y : z
//如果x==ture, 则结果为y,否则为z


int score = 80;
String type = score < 60 ? "不及格" : "及格"; //必须掌握
System.out.println(type); //输出及格
// if偷懒用法

}
}

9、运算符优先级

优先用小括号去组织!

 

本文是学习狂神老师的课程时做的笔记,部分内容参考了狂神老师的视频和随笔

狂神老师课程链接:https://www.kuangstudy.com/

 

 

 



posted @ 2022-08-16 13:48  YeJ1an  阅读(25)  评论(0编辑  收藏  举报