Java基础里,你知道运算符么?

简介: 计算机自打诞生以来,用作最多的就是进行计算,而计算离不开运算符,所以运算符在我们的Java语言中的地位举足轻重,我们现在就来了解一下Java给我们提供的运算符。从运算的元素的个数来区分,可以分为一元运算符,二元运算符,三元运算符。

算符简介

计算机自打诞生以来,用作最多的就是进行计算,而计算离不开运算符,所以运算符在我们的Java语言中的地位举足轻重,我们现在就来了解一下Java给我们提供的运算符。

从运算的元素的个数来区分,可以分为一元运算符,二元运算符,三元运算符。

其中一元运算符包括:

+(正数)-(负数)++(自增1)—(自减1)~(按位取反)!(逻辑取反)

其实自增和自减也可以看成是特殊的二元运算符

二元运算符包括:

算术运算符:+ ,-,*,/,%逻辑运算符:&&,||关系运算符:==,!=,>,<,>=,<=位运算符:&,|,^,<<,>>,>>>赋值运算符:=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=instanceof运算符:instanceof

三元运算符就只有一种:?:

4.jpg

这些运算相信绝大部分已经被在座的各位所熟知,只有极个别的不是很清楚的,下面我所了解的一些面试热点知识来进行讲解。

一些运算符的小常识

自增,自减的前后位置

老生常谈的一个问题,但是还是容易被搞混,自增和自减的顺序前后到底有何不同:

单独使用的时候,两种没有任何区别(温馨提示:面试的时候切记不要忘记第一点哟表达式中使用的时候,前缀会先进行+1(-1)的运算,而后缀会先运算后进行+1(-1);

在无视掉第一种情况的下,可以简单记为前缀前,后缀后

逻辑运算符的短路特性

我们在使用逻辑运算符&&,||的时候,可以利用逻辑运算符的短路特性减少运算次数,所谓短路特性就是当第一个条件可以判断最终结果的时候,就不会去判断第二个条件

A && B (当A为false,直接跳过第二个条件的判断,判定为false)
A || B (当A为true,直接跳过第二个条件的判断,判定为true)

三元运算符

该运算符的主要是决定哪个值应该赋值给变量。

        int a , b;
    a = 10;
    // 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
    b = (a == 1) ? 20 : 30;
    System.out.println( "Value of b is : " +  b );
    // 如果 a 等于 10 成立,则设置 b 为 20,否则为 30
    b = (a == 10) ? 20 : 30;
    System.out.println( "Value of b is : " + b );

instanceof

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

Vehicle a = new Car();
boolean result =  a instanceof Car;
System.out.println( result);

位运算符

位运算符可能在我们日常中使用的并不是很多,算是一个小盲区。但是其实这个运算符还是非常的重要的,我们首先来了解一下运算的机制,与其他运算符不同的是,位运算符是要讲数值转换成二进制后,再进行运算。

&

5.jpg6.jpg

^是按位异或运算符,只有两个对应的运算位不一致的时候,对应计算出的位置为1,否则为0。

~是按位取反运算符,将每一位取反(1 -> 0,0 ->1)

>>这里需要注意>>>>>存在一定的区别:

7.jpg

>> :该数对应的二进制码整体右移,左边的用原有标志位补充,右边超出的部分舍弃。

>>> :不管正负标志位为0还是1,将该数的二进制码整体右移,左边部分总是以0填充,右边部分舍弃。

其余操作部分与<<类似,就不再画图演示


  • 计算 $m * 2^n$ 次方
2 << 3 = 16;
2 * (2 * 2 * 2) = 16;
  • 判断一个数n的奇偶性
a & 1 = 0; // 偶数
a & 1 = 1; // 奇数


  • 不用临时变量交换两个数
  a = a^b; 
  b = b^a; 
  a = a^b;
  • x 的 相反数 表示为 (~x+1)


-x = (~x+1)


  • 取绝对值 (a^(a>>31))-(a>>31)


其余的一些在算法中用到的场景,我这里就不再多少,有兴趣的同学可以去研究一下~

运算符优先级

最高优先级的在该表上方,最低优先级的在该表底部

类别 操作符 关联性
后缀 ()[].(点操作符) 左到右
一元 ++ - !~ 右到左
乘性 * / % 左到右
加性 + - 左到右
移位 >> >>> << 左到右
关系 > >= = < <= 左到右
相等 == ~= 左到右
按位与 & 左到右
按位异或 ^ 左到右
按位或 | 左到右
逻辑与 && 左到右
逻辑或 || 左到右
条件 ?: 从右到左
赋值 =,+=,-=,等等 从右到左
逗号 左到右


相关文章
|
3月前
|
Java
Java运算符
Java运算符
51 12
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
86 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
算法 Java 测试技术
🌟Java 零基础 | 详解 单目运算符
【10月更文挑战第14天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
47 7
|
2月前
|
Java 测试技术 开发者
🌟Java 零基础 | 深入理解三目运算符
【10月更文挑战第13天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
28 3
|
2月前
|
Java 测试技术 开发者
🌟Java零基础-Lambda运算符详解 🌟
【10月更文挑战第12天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
26 1
|
2月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
51 4
|
2月前
|
安全 Java 测试技术
🌟 Java 零基础 | 详解 instanceof 运算符
【10月更文挑战第1天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
41 1
|
2月前
|
存储 Java C语言
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
42 3
|
3月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
3月前
|
Java 测试技术 程序员
Java零基础(23) - Java赋值运算符,了解一下!
【9月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
63 11