栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java | 运算符

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java | 运算符

目录

一、算数运算符

二、关系运算符

三、逻辑运算符

四、赋值运算符

五、三元运算符

六、位运算符

七、括号与运算符级别


一、算数运算符

算数运算符

用途

+

加法运算,字符串连接运算,正号

-

减法运算,负号

*

乘法运算

/

除法运算,当参与 / 运算的两个操作数都是整数时, 表示整数除法;否则, 表示浮点除法。整数被 0 除将会产生一个异常, 而浮点数被 0 除将会得到无穷大或 NaN 结果。

%

取模运算,两个数字相除取余数 公式:a % b = a - a / b * b

当a是小数时,公式:a % b = a - (int)a / b * b

++、--

自增自减运算

++ 运算,变量自己增长1。 -- 运算,变量自己减少1,用法与 ++ 一致。

  • 独立运算: 变量在独立运算时, 前++(i++) 和 后++(++i) 没有区别。
  • 混合运算: 
    • 前++(i++),变量先+1,然后使用结果。 【先加后用】
    • 后++(++i),先使用变量本来的数值,然后变量+1。【先用后加】

+ 符号在字符串中的操作:

  • + 符号在遇到字符串的时候,表示连接、拼接的含义。
    • "a"+"b"的结果是“ab”,连接含义。

运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。

public class ArithmeticOperator{
	public static void main(String[] args) {

		System.out.println(10 / 4);	// 2 整数运算结果也是整数
		System.out.println(10.0 / 4);	// 2.5

		double a = 10 / 4;	// 先整数运算10/4得到2,再转换为double类型,得到2.0
		System.out.println(a);

		// 取模 %
		// 公式:a % b = a - a / b * b
		System.out.println(10 % 3);		// 1
		System.out.println(-10 % 3);	// -1
		// -10 - (-10) / 3 * 3
		// -10 - (-3) * 3
		// -10 - (-9)
		// -10 + 9
		// -1
		System.out.println(10 % -3);	// 1	
		// 10 - 10 / (-3) * (-3)
		// 10 - (-3) * (-3)
		// 10 - 9
		// 1
		System.out.println(-10 % -3);	// -1
        System.out.println(-10.5 % 3);	// -1.5
        // -10.5 - (int)(-10.5) / 3 * 3
        // -10.5 - (-10) / 3 * 3
        // -10.5 - (-3) * 3
        // -10.5 - (-9)
        // -10.5 + 9
        // -1.5

		// ++
		int i = 10;
		i++;
		++i;
		System.out.println("i = " + i);

		// 作为表达式使用
		// 前++: ++i 先自增,再使用
		// 后++: i++ 先使用,后自增
		int j = 8;
		// int k = ++j;	// 等价于 j = j + 1; k = j; 两条语句
		int k = j++;	// 等价于 k = j; j = j + 1; 两条语句
		System.out.println("k = " + k + ", j = " + j);

	}
}

练习

int i = 1;
i = i++;
System.out.println(i);

// i 的输出结果为【1】
int i = 1;
i = ++i;
System.out.println(i);

// i 的输出结果为【2】

二、关系运算符

运算符

描述

==

比较符号两边数据是否相等,相等结果是true

<

比较符号左边的数据是否小于右边的数据,如果小于结果是true

>

比较符号左边的数据是否大于右边的数据,如果大于结果是true

<=

比较符号左边的数据是否小于或者等于右边的数据,如果小于结果是true

>=

比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是true

!=

不等于符号 ,如果符号两边的数据不相等,结果是true

instanceof

判断是否为类的对象    "aaa" instanceof String   结果为true

关系运算符,是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false 。

关系运算符组成的表达式,我们称为关系表达式。

public class RelationalOperator{
	public static void main(String[] args) {
		int a = 9;
		int b = 8;
		System.out.println(a > b);	// true
		System.out.println(a >= b);	// true
		System.out.println(a < b);	// false
		System.out.println(a <= b);	// false
		System.out.println(a == b);	// false
		System.out.println(a != b);	// false
		boolean flag = a > b;	// true
		System.out.println("flag = " + flag);
	}
}

因为浮点数运算是近似值,所以比较是否相等时使用“==”结果不准确。例如比较a和b是否相等,可以这样:

if (a - b < 0.00000001) {}

当运算的值小于某一定程度的时候,认为他是相等的。

三、逻辑运算符

运算符

描述

&&    短路与

两边都是true,结果是true;一边是false,结果是false。符号左边是false,右边不再运算,效率高

||       短路或

两边都是false,结果是false;一边是true,结果是true。符号左边是true,右边不再运算,效率高

&    逻辑与

两边都是true,结果是true;一边是false,结果是false。符号左边是false,右边继续运算,效率低

|      逻辑或

两边都是false,结果是false;一边是true,结果是true。符号左边是true,右边继续运算,效率低

!     取反

! true 结果是false;! false结果是true

^      异或

逻辑异或,当两边值不同时,结果为 true,    否则为 false

与“&&”,或“||”,具有短路效果:如果根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能。可以有多个条件:条件A && 条件B && 条件C。

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

false

false

false

false

false

true

false

public class LogicOperator{
	public static void main(String[] args) {
		int age = 50;
		if (age > 20 && age < 90) {
			System.out.println("ok100");
		}

		if (age > 20 & age < 90) {
			System.out.println("ok200");
		}

		int a = 4;
		int b = 9;
		if (a < 1 && ++b < 20) {
			System.out.println("ok300");
		}
		System.out.println("b = " + b);	// b = 9

		int c = 4;
		int d = 9;
		if (c < 1 & ++d < 20) {
			System.out.println("ok400");
		}
		System.out.println("d = " + d);	// d = 10

		int e = 4;
		int f = 9;
		if (e > 1 || ++f < 20) {
			System.out.println("ok500");
		}
		System.out.println("f = " + f);	// f = 9

		int g = 4;
		int h = 9;
		if (g > 1 | ++h < 20) {
			System.out.println("ok400");
		}
		System.out.println("h = " + h);	// h = 10

		System.out.println(!(60 > 20));	// false
		System.out.println(!(60 < 20));	// true

		boolean i = (10 > 1) ^ (3 < 5);
		System.out.println("i = " + i);	// false

		boolean j = (10 > 1) ^ (3 > 5);
		System.out.println("j = " + j);	// true
	}
}

练习

boolean x = true;
boolean y = false;
short z = 46;
if ((z++ == 46) && (y = true)) {
	z++;
}
if ((x = false) || (++z) == 49) {
	z++;
}
System.out.println("z = " + z);	// 50

四、赋值运算符

赋值运算符,就是将符号右边的值,赋给左边的变量。如果运算符得到一个值, 其类型与左侧操作数的类型不同, 就会发生强制类型转换。

赋值运算符

描述

=

等于号

+=

加等于  x += 4;    等价于:x = x + 4;

-=

减等于

*=

乘等于

/=

除等于

%=

取模等

运算顺序从右往左int num = a + b + c;

赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值

复合赋值运算符会进行类型转换。 byte b = 2; b+=3; b++;

public class AssignOperator{
	public static void main(String[] args) {
		int n1 = 10;
		n1 += 4;
		System.out.println(n1);	// 14

		n1 /= 3;
		System.out.println(n1);	// 4

		byte b = 3;
		b += 2;	// 等价于 b = (byte)(b + 2);
		b++;	// 等价于 b = (byte)(b + 1);
	}
}

五、三元运算符

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

三元运算符计算方式:

  • 条件表达式结果是true,三元运算符整体结果为表达式1。
  • 条件表达式结果是false,三元运算符整体结果为表达式2。

必须同时保证表达式A和表达式B都符合左侧数据类型的要求。三元运算符的结果必须被使用。

三元运算符可以转成 if--else 语句

表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)

public class TernaryOperator {
	public static void main(String[] args) {
		int a = 10;
		int b = 99;
		// 1. a > b 为false
		// 2. 得到表达式 b--
		// 3. 因为是 后--,先将b的值赋给result
		// 4. result的值为99,b的值为98
		int result = a > b ? a++ : b--;
		System.out.println("result = " + result);
		System.out.println("b = " + b);
	}
}

六、位运算符

处理整型类型时,可以直接对组成整型数值的各个位完成操作。这意味着可以使用掩码技术得到整数中的各个位。 

运算符

描述

& ("and")

按位与

两位全为1,结果为1,否则为0

| ("or")

按位或

两位有一个为1,结果为1,否则为0

^ ("xor")

按位异或

两位一个为0,一个为1,结果为1,否则为0

~ ("not")

按位取反

0为1,1为0

关于二进制和十进制的相互转换可以看这篇文章:

public class TernaryOperatorDetail {
    public static void main(String[] args) {
        
        System.out.println(2 & 3);

        
        System.out.println(~-2);

        
        System.out.println(~2);
    }
}

运算符

描述

>>

算数右移

低位溢出,符号位不变,并用符号位补溢出的高位

<<

算数左移

符号位不变,低位补0

>>>

无符号右移、逻辑右移

低位溢出,高位补0

public class TernaryOperatorDetail {
    public static void main(String[] args) {
        
        System.out.println(1 >> 2);

        
        System.out.println(4 << 3);
    }
}

这些运算符按位模式处理。例如, 如果 n 是一个整数变量,而且用二进制表示的 n 从右边数第 4 位为 1,则

int fourthBitFromRight = (n & 0b1000) / 0b1000;会返回 1,否则返回 0。利用 & 并结合使用适当的 2 的幂, 可以把其他位掩掉, 而只保留其中的某一位。

& 和丨运算符应用在布尔值上时也会得到一个布尔值。这些运算符与 && 和 || 运算符很类似,不过 & 和丨运算符不采用“ 短路” 方式来求值, 也就是说,得到计算结果之前两个操作数都需要计算。

>>和<<运算符将位模式左移或右移。需要建立位模式来完成位掩码时, 这两个运算符会很方便:

int fourthBitFromRight = (n & (1<< 3)) >> 3;

最后,>>> 运算符会用 0 填充高位,这与>>不同,它会用符号位填充高位。不存在<<<运算符。

七、括号与运算符级别

从上到下优先级从高到低

运算符

结合性

[ ]    .    ( ) (方法调用)

从左向右

!    ~    ++    --    + (一元运算符)    - (一元运算符)    ( ) (强制类型转换)    new

从右向左

*    /    %

从左向右

+    -

从左向右

<<    >>    >>>

从左向右

<    <=    >    >=    instanceof

从左向右

==    !=

从左向右

&

从左向右

^

从左向右

|

从左向右

&&

从左向右

||

从左向右

? :

从左向右

=    +=    -=    *=    /=    %=    &=    |=    ^=    <<=    >>=    >>>=

从右向左

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396764.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号