【Java】运算符详解

发布于:2023-02-02 ⋅ 阅读:(529) ⋅ 点赞:(0)

目录

前言

一、算术运算符

1、算术运算符一览

2、案例详解

1)/与%的使用

2)++与- - 

二、关系运算符

1、关系运算符一览

2、案例详解

三、逻辑运算符

1、逻辑运算符一览

2、逻辑运算规则

1)&与&&

2)|与||

3)!与^

四、赋值运算符

1、赋值运算符一览

2、案例讲解

五、三元运算符

六、运算符的优先级

七、标识命名规范

八、关键字与保留字

1、关键字

2、保留字

九、键盘输入语句


前言

运算符是构成Java语句的重要组成部分,运算符是一种特殊的符号, 用以表示数据的运算、 赋值和比较等。其分类如下:

  • 算术运算符
  • 赋值运算符
  • 关系运算符 [比较运算符]
  • 逻辑运算符
  • 位运算符
  • 三元运算符

一、算术运算符

算术运算符是对数值类型的变量进行计算的,如基本的加减乘除。

1、算术运算符一览

算术运算符
运算符 运算 范例 结果
+ 正号 +7 7
- 负号 b=3;-b -3
+ 3+8 11
* 6*6 36
/ 5/5 1
% 取模(取余) 11%9 2

         ++

         ++

 自增(前):先运算后使用

 自增(后):先使用后运算

    a=2;b=++a;

    a=2;b=a++;

   a=3;b=3;

   a=3;b=2;

         - -

         - -

 自减(前):先运算后使用

 自增(后):先使用后运算

    a=2;b=++a;

    a=2;b=a++;

   a=1;b=1;

   a=1;b=2

+ 字符串相加 “hello”+“world” “hello world”

2、案例详解

1)/与%的使用

我们见如下代码:

public class CSDN { 
	//编写一个main方法
	public static void main(String[] args) {

		// /的使用
		System.out.println(10 / 4);   //运算结果为2
		System.out.println(10.0 / 4); //运算结果为2.5

		double d = 10 / 4;		//运行结果为2.0
		System.out.println(d);
	}
}

通过上面的代码我们可以看出/操作符与我们之前在数学中的运算方式不同,比如第一个打印语句中的内容“10/4”,在我们之前的认识中其结果为2.5,但是最后的运行结果为2,这是因为对于“/”操作符来说如果左右两边的操作数都为整数其会将小数部分去除,保留整数部分,这是计算机的规则。

那么我们想要保留小数部分我们应该怎么做呢?我们只需要将其中一个或两个整数改为小数,这样就可以实现小数除法。例如第二个打印内容。

我们再来看“double d = 10 / 4;”语句,运算结果为2.0,我们一起来分析一下这个过程:先进行10/4的运算得到2,再进行隐式数据类型定义转换,将整型转换成double型。

我们再来看“%”的使用:

public class CSDN { 
	//编写一个main方法
	public static void main(String[] args) {

		// % 取模 ,取余
		System.out.println(-10 % 3);
		
		System.out.println(10 % 3);
		
		System.out.println(10 % -3);

		System.out.println(15 % -3);
	}
}

% 的本质其实是一个公式:

a % b = a - a / b * b

我们先来分析-10 % 3。代入公式得:-10 % 3 => -10 - (-10) / 3 * 3 = -10 + 9 = -1

后面几条语句运算方式同上,可以自己动手算一算,语句结果如下:

2)++与- - 

这里只讲解前置++与后置++,因为++与--原理一致。看下面一段代码:

public class CSDN { 
	//编写一个main方法
	public static void main(String[] args) {

		//++的单独使用
		//
		int i = 10;
		i++;
		++i;
		System.out.println("i=" + i);//12

		//++的表达式使用
		/*前++: ++i 先自增后赋值
		后++: i++先赋值后自增*/
		int j = 8;
		int k = ++j;
		int a = 5;
		int b = a++;
		System.out.println("k=" + k + " j=" + j);
		System.out.println("a=" + a + " b=" + b);
	}
}

当++单独使用时,无论是前置还是后置,都相当于 i = i + 1;而当其作为表达式语句时,前置与后置分别等价以下情况:

int j = 8; int k = ++j   等价于  j = j + 1; k = j;

int a = 5; int b = a++  等价于  b = a;  a = a++;


二、关系运算符

1、关系运算符一览

关系运算符
运算符 运算 范例 结果
== 相等于 8 == 7 false
!= 不等于 8 != 7 true
< 小于 8 < 7 false
> 大于 8 > 7 true
<= 小于等于 8 <= 7 false
>= 大于等于 8 >= 7 true
instanceof 检查是否是类的对象 “hhh” instanceof String true

2、案例详解

public class CSDN { 
	//编写一个main方法
	public static void main(String[] args) {

		int a = 9;
		int b = 8;
		System.out.println(a > b); //T
		System.out.println(a >= b); //T
		System.out.println(a <= b); //F
		System.out.println(a < b);//F
		System.out.println(a == b); //F
		System.out.println(a != b); //T

	}
}

关系运算符的结果都是boolean类型,也就是说结果要么是true,要么是false。关系运算符比较简单,还有一个注意的点是比较运算符“==”不要误写成赋值运算符“=”。


三、逻辑运算符

用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值

1、逻辑运算符一览

逻辑运算符
a b a & b a && b a | b a || b !a a ^ b
true true true true true true false false
true false false false true true false true
false true false false true true true true
false true false false false false true false

2、逻辑运算规则

a&b:&-逻辑与     规则:a和b同时为true,则结果为true,否则为false

a&&b : &&-叫短路与     规则:当a和b同时为 true ,则结果为 true,否则为 false
a|b : |-叫逻辑或     规则: a和b只要有一个为 true ,则结果为 true,否则为 false
a || b : ||-叫短路或     规则:a和b只要有一个为 true ,则结果为 true,否则为 false
!a : !-叫取反,或者非运算。 当 a 为 true, 则结果为 false, 当 a 为 false 是, 结果为 true
a^b: ^-叫逻辑异或,当a和b不同时,则结果为 true, 否则为 false

1)&与&&

public class CSDN { 
	//编写一个main方法
	public static void main(String[] args) {
		//&&短路与使用
		int age = 50;
		if(age > 20 && age < 90) {
			System.out.println("abcdefg");
		}

		//&逻辑与使用
		if(age > 20 & age < 90) {
		System.out.println("12345678");
		}
	}
}

&和&&的判断条件一致,即只要当左右两边都为true时才为true。那么&与&&之间的区别是什么呢?区别如下:

  • &&短路与: 如果第一个条件为 false, 则第二个条件不会判断, 最终结果为 false, 效率高
  • & 逻辑与: 不管第一个条件是否为 false, 第二个条件都要判断, 效率低

2)|与||

public class CSDN { 
	//编写一个main方法
	public static void main(String[] args) {
		//||短路或使用
		int age = 50;
		if(age > 20 || age < 30) {
		System.out.println("abcdefg");
		}

		//&逻辑与使用
		if(age > 20 | age < 30) {
			System.out.println("12345678");
		}
	}
}

|与||的判断条件也是一致的,我们来看看它们的区别:

  • ||短路或: 如果第一个条件为 true, 则第二个条件不会判断, 最终结果为 true, 效率高
  • |逻辑或: 不管第一个条件是否为 true, 第二个条件都要判断, 效率低

在开发中比较常用的是&&与||。

3)!与^

!是取反操作即当原表达式为真时,取反后即为假,若原表达式为真,则相反。

^  是逻辑异或,a^b,当a与b不同时,则结果为true,否则为false

public class CSDN { 
	//编写一个main方法
	public static void main(String[] args) {


		//! 取反的使用
		System.out.println(60 > 20); //T
		System.out.println(!(60 > 20)); //F


		//a^b:逻辑异或的使用
		boolean b = (10 > 1) ^ ( 3 > 5);
		System.out.println("b=" + b);//T
	}
}

四、赋值运算符

1、赋值运算符一览

基本赋值运算符 =
复合赋值运算符 +=,-=,*=,/=,%=,...

2、案例讲解

关于复合赋值运算符这里只讲解+=以及/=因为其他的运算规则一致。

public class CSDN { 
	//编写一个main方法
	public static void main(String[] args) {

		int n1 = 10;
		n1 += 4;// n1 = n1 + 4;
		System.out.println(n1); // 14

		n2 /= 3;// n2 = n2 / 3;//4
		System.out.println(n2); // 4
	}
}

n1 += 4其等价于n1 = n1 + 4,而n2 /= 3其等价于n2 = n2 / 3。

赋值运算符的特点:

  1. 运算顺序从右往左
  2. 赋值运算符的左边 只能是变量,右边 可以是变量、 表达式、 常量值
  3. 复合赋值运算符会进行类型转换(代码如下)
byte b = 3;
b += 2; // 等价 b = (byte)(b + 2);
b++; // b = (byte)(b+1);

五、三元运算符

三元运算符也称为三目运算符,其基本语法为:

条件表达式 ?表达式1 :表达式2

运算规则为:若条件表达式为真则执行表达式1,为假则执行表达式2。

举例:

public class CSDN { 
	//编写一个main方法
	public static void main(String[] args) {
		int a = 10;
		int b = 99;

		int result = a > b ? a++ : b--;

		System.out.println("result=" + result);
		System.out.println("a=" + a);
		System.out.println("b=" + b);

	}
}

a的值为10,b的值为99,即a>b条件表达式为假,返回b--,先返回b的值,然后在进行b-1的操作。注意:表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)。

三目运算符可以转换为if...else语句。


六、运算符的优先级

运算符有不同的优先级, 所谓优先级就是表达式运算中的运算顺序。 如下表, 上一行运算符的优先级总优先于下一行。只有单目运算符、 赋值运算符是从右向左运算的,其他都为从左向右的。

运算符优先级
.   ()   {}   ;   ,
R——>L ++   --   ~   !(data type)
L——>R *   /   %
L——>R +   -
L——>R <<   >>   >>>   位移
L——>R <   >   <=   >=   instanceof
L——>R ==   !=
L——>R &
L——>R ^
L——>R |
L——>R &&
L——>R ||
L——>R ?   :
R——>L =   *=   /=   %=
+=   -=   <<=   >>=
>>>=   &=   ^=   |=

七、标识命名规范

这里只进行几个基本的规范,更加详细的见文档。

  1. 包名: 多单词组成时所有字母都小写: aaa.bbb.ccc
  2. 类名、 接口名: 多单词组成时, 所有单词的首字母大写: XxxYyyZzz [大驼峰]
  3. 变量名、 方法名: 多单词组成时, 第一个单词首字母小写, 第二个单词开始每个单词首字母大写: xxxYyyZzz [小驼峰, 简称 驼峰法]
  4. 常量名: 所有字母都大写。 多单词时每个单词用下划线连接: XXX_YYY_ZZZ

八、关键字与保留字

1、关键字

被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词)。关键字中所有字母都为小写

用于定义数据类型的关键字 class、interface、enum、byte、short、int、long、float、double、char、boolean、void
用于定义数据类型值的关键字 true、false、null
用于定义流程控制的关键字 if、else、switch、case、default、while、do、for、break、continue、return
用于定义访问权限修饰符的关键字 private、protected、public
用于定义类、函数、变量修饰符的关键字 abstract、final、static、synchronized
用于定义类与类之间关系的关键字 extends、implements
用于定义建立实例及引用实例、判断实例的关键字 new、this、super、instanceof
用于包的关键字 package、import
用于异常处理的关键字 try、catch、finally、throw、throws
其他修饰符关键字 native、strictfp、transient、volatile、assert

2、保留字

现有 Java 版本尚未使用, 但以后版本可能会作为关键字使用。 自己命名标识符时要避免使用这些保留字: byValue、 cast、 future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、 const。


九、键盘输入语句

在编程中,我们需要提高程序的灵活性,需要接收用户输入的数据,就可以使用键盘输入语句来获取。需要一个 扫描器(对象), 就是Scanner

方法:

  1. 导入该类的所在包, java.util.*
  2. 创建该类对象(声明变量)
  3. 调用里面的功能
import java.util.Scanner; //把Java.util下的Scanner类导入

public class Import {
	//编写main方法
	public static void main(String[] args)
	{
		//演示接受用户的输入
		//步骤
		//Scanner类 表示 简单文本扫描器,在Java.util包
		//1.引入/导入Scanner类所在的包
		//2.创建Scanner对象,new 创建
		//   myScanner就是Scanner类的对象
		Scanner myScanner = new Scanner(System.in);
		//3.接收用户输入的信息使用 相关的方法
		
		System.out.println("请输入名字");
		String name = myScanner.next();//当程序执行到next方法时,会等待用户输入~
		System.out.println("名字=" + name); 
	}
}

网站公告

今日签到

点亮在社区的每一天
去签到