【Java】运算符详解

目录

前言

一、算术运算符

1、算术运算符一览

2、案例详解

1)/与%的使用

2)++与- - 

二、关系运算符

1、关系运算符一览

2、案例详解

三、逻辑运算符

1、逻辑运算符一览

2、逻辑运算规则

1)&与&&

2)|与||

3)!与^

四、赋值运算符

1、赋值运算符一览

2、案例讲解

五、三元运算符

六、运算符的优先级

七、标识命名规范

八、关键字与保留字

1、关键字

2、保留字

九、键盘输入语句


前言

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

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

一、算术运算符

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

1、算术运算符一览

算术运算符
运算符运算范例结果
+正号+77
-负号b=3;-b-3
+3+811
*6*636
/5/51
%取模(取余)11%92

         ++

         ++

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

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

    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 == 7false
!=不等于8 != 7true
<小于8 < 7false
>大于8 > 7true
<=小于等于8 <= 7false
>=大于等于8 >= 7true
instanceof检查是否是类的对象“hhh” instanceof Stringtrue

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、逻辑运算符一览

逻辑运算符
aba & ba && ba | ba || b!aa ^ b
truetruetruetruetruetruefalsefalse
truefalsefalsefalsetruetruefalsetrue
falsetruefalsefalsetruetruetruetrue
falsetruefalsefalsefalsefalsetruefalse

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); 
	}
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值