Java 教程
- Java - 首页
- Java - 概述
- Java - 历史
- Java - 特性
- Java 与 C++
- JVM - Java 虚拟机
- Java - JDK 与 JRE 与 JVM
- Java - Hello World 程序
- Java - 环境设置
- Java - 基本语法
- Java - 变量类型
- Java - 数据类型
- Java - 类型转换
- Java - Unicode 系统
- Java - 基本运算符
- Java - 注释
- Java - 用户输入
- Java - 日期和时间
Java 控制语句
- Java - 循环控制
- Java - 决策制定
- Java - If-else
- Java - Switch
- Java - For 循环
- Java - For-Each 循环
- Java - While 循环
- Java - do-while 循环
- Java - Break
- Java - Continue
面向对象编程
- Java - OOPs 概念
- Java - 对象和类
- Java - 类属性
- Java - 类方法
- Java - 方法
- Java - 变量作用域
- Java - 构造函数
- Java - 访问修饰符
- Java - 继承
- Java - 聚合
- Java - 多态
- Java - 重写
- Java - 方法重载
- Java - 动态绑定
- Java - 静态绑定
- Java - 实例初始化块
- Java - 抽象
- Java - 封装
- Java - 接口
- Java - 包
- Java - 内部类
- Java - 静态类
- Java - 匿名类
- Java - 单例类
- Java - 包装类
- Java - 枚举
- Java - 枚举构造函数
- Java - 枚举字符串
Java 内置类
Java 文件处理
Java 错误和异常
- Java - 异常
- Java - try-catch 块
- Java - try-with-resources
- Java - 多重捕获块
- Java - 嵌套 try 块
- Java - Finally 块
- Java - throw 异常
- Java - 异常传播
- Java - 内置异常
- Java - 自定义异常
Java 多线程
- Java - 多线程
- Java - 线程生命周期
- Java - 创建线程
- Java - 启动线程
- Java - 线程连接
- Java - 线程命名
- Java - 线程调度器
- Java - 线程池
- Java - 主线程
- Java - 线程优先级
- Java - 守护线程
- Java - 线程组
- Java - 关闭钩子
Java 同步
Java 网络
- Java - 网络
- Java - 套接字编程
- Java - URL 处理
- Java - URL 类
- Java - URLConnection 类
- Java - HttpURLConnection 类
- Java - Socket 类
- Java - 泛型
Java 集合
Java 接口
Java 数据结构
Java 集合算法
高级 Java
- Java - 命令行参数
- Java - Lambda 表达式
- Java - 发送电子邮件
- Java - Applet 基础
- Java - Javadoc 注释
- Java - 自动装箱和拆箱
- Java - 文件不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 文件
- Java - 私有接口方法
- Java - 内部类菱形运算符
- Java - 多分辨率图像 API
- Java - 集合工厂方法
- Java - 模块系统
- Java - Nashorn JavaScript
- Java - Optional 类
- Java - 方法引用
- Java - 函数式接口
- Java - 默认方法
- Java - Base64 编码解码
- Java - Switch 表达式
- Java - Teeing 收集器
- Java - 微基准测试
- Java - 文本块
- Java - 动态 CDS 存档
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指针异常
- Java - 打包工具
- Java - 密封类
- Java - 记录类
- Java - 隐藏类
- Java - 模式匹配
- Java - 简洁数字格式化
- Java - 垃圾回收
- Java - JIT 编译器
Java 杂项
- Java - 递归
- Java - 正则表达式
- Java - 序列化
- Java - 字符串
- Java - Process API 增强
- Java - Stream API 增强
- Java - 增强 @Deprecated 注释
- Java - CompletableFuture API 增强
- Java - 流
- Java - 日期时间 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API 和框架
Java 类参考
- Java - Scanner
- Java - 数组
- Java - 字符串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用资源
Java - 基本运算符
Java 运算符是用于对变量和值执行各种操作的符号。通过使用这些运算符,我们可以执行加法、减法、检查小于或大于等操作。
Java 中有不同类型的运算符,我们已在下面列出它们 -
- 算术运算符
- 关系运算符
- 按位运算符
- 逻辑运算符
- 赋值运算符
- 其他运算符
Java 算术运算符
算术运算符以与在代数中使用相同的方式用于数学表达式。下表列出了算术运算符 -
假设整数变量 A 保持 10,变量 B 保持 20,则 -
运算符 | 描述 | 示例 |
---|---|---|
+ (加法) | 将运算符两侧的值相加。 | A + B 将得到 30 |
- (减法) | 从左操作数中减去右操作数。 | A - B 将得到 -10 |
* (乘法) | 将运算符两侧的值相乘。 | A * B 将得到 200 |
/ (除法) | 将左操作数除以右操作数。 | B / A 将得到 2 |
% (模) | 将左操作数除以右操作数并返回余数。 | B % A 将得到 0 |
++ (自增) | 将操作数的值增加 1。 | B++ 得到 21 |
-- (自减) | 将操作数的值减少 1。 | B-- 得到 19 |
Java 关系运算符
Java 语言支持以下关系运算符。
假设变量 A 保持 10,变量 B 保持 20,则 -
运算符 | 描述 | 示例 |
---|---|---|
== (等于) | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 为假。 |
!= (不等于) | 检查两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> (大于) | 检查左操作数的值是否大于右操作数的值,如果大于则条件为真。 | (A > B) 为假。 |
< (小于) | 检查左操作数的值是否小于右操作数的值,如果小于则条件为真。 | (A < B) 为真。 |
>= (大于或等于) | 检查左操作数的值是否大于或等于右操作数的值,如果大于或等于则条件为真。 | (A >= B) 为假。 |
<= (小于或等于) | 检查左操作数的值是否小于或等于右操作数的值,如果小于或等于则条件为真。 | (A <= B) 为真。 |
Java 按位运算符
Java 定义了几个按位运算符,这些运算符可以应用于整数类型、long、int、short、char 和 byte。
按位运算符作用于位并执行逐位操作。假设如果 a = 60 且 b = 13;现在以二进制格式,它们将如下所示 -
a = 0011 1100 b = 0000 1101 a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
下表列出了按位运算符 -
假设整数变量 A 保持 60,变量 B 保持 13,则 -
运算符 | 描述 | 示例 |
---|---|---|
& (按位与) | 二进制 AND 运算符如果位存在于两个操作数中,则将其复制到结果中。 | (A & B) 将得到 12,即 0000 1100 |
| (按位或) | 二进制 OR 运算符如果位存在于任一操作数中,则将其复制。 | (A | B) 将得到 61,即 0011 1101 |
^ (按位异或) | 二进制 XOR 运算符如果位在一个操作数中设置但不在两个操作数中都设置,则将其复制。 | (A ^ B) 将得到 49,即 0011 0001 |
⁓ (按位取反) | 二进制一补码运算符是单目运算符,其作用是“翻转”位。 | (⁓A ) 将得到 -61,由于带符号二进制数,因此在 2 的补码形式中为 1100 0011。 |
<< (左移) | 二进制左移运算符。左操作数的值向左移动由右操作数指定的位数。 | A << 2 将得到 240,即 1111 0000 |
>> (右移) | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 | A >> 2 将得到 15,即 1111 |
>>>(零填充右移) | 右移零填充运算符。左操作数的值向右移动右操作数指定的位数,并且移位的数值用零填充。 | A >>> 2 将得到 15,即 0000 1111 |
Java 逻辑运算符
下表列出了逻辑运算符:
假设布尔变量 A 为真,变量 B 为假,则:
运算符 | 描述 | 示例 |
---|---|---|
&&(逻辑与) | 称为逻辑与运算符。如果两个操作数都不为零,则条件为真。 | (A && B) 为假 |
||(逻辑或) | 称为逻辑或运算符。如果两个操作数中任何一个不为零,则条件为真。 | (A || B) 为真 |
!(逻辑非) | 称为逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将使其为假。 | !(A && B) 为真 |
赋值运算符
以下是 Java 语言支持的赋值运算符:
运算符 | 描述 | 示例 |
---|---|---|
= | 简单赋值运算符。将右侧操作数的值赋给左侧操作数。 | C = A + B 将 A + B 的值赋给 C |
+= | 加法赋值运算符。将右侧操作数加到左侧操作数上,并将结果赋给左侧操作数。 | C += A 等价于 C = C + A |
-= | 减法赋值运算符。从左侧操作数中减去右侧操作数,并将结果赋给左侧操作数。 | C -= A 等价于 C = C − A |
*= | 乘法赋值运算符。将右侧操作数乘以左侧操作数,并将结果赋给左侧操作数。 | C *= A 等价于 C = C * A |
/= | 除法赋值运算符。将左侧操作数除以右侧操作数,并将结果赋给左侧操作数。 | C /= A 等价于 C = C / A |
%= | 取模赋值运算符。使用两个操作数进行取模运算,并将结果赋给左侧操作数。 | C %= A 等价于 C = C % A |
<<= | 左移赋值运算符。 | C <<= 2 等价于 C = C << 2 |
>>= | 右移赋值运算符。 | C >>= 2 等价于 C = C >> 2 |
&= | 按位与赋值运算符。 | C &= 2 等价于 C = C & 2 |
^= | 按位异或赋值运算符。 | C ^= 2 等价于 C = C ^ 2 |
|= | 按位或赋值运算符。 | C |= 2 等价于 C = C | 2 |
Java 其他运算符
Java 语言还支持一些其他运算符。
条件运算符(? :)
条件运算符也称为**三元运算符**。此运算符包含三个操作数,用于评估布尔表达式。运算符的目标是确定应将哪个值赋给变量。运算符写成:
variable x = (expression) ? value if true : value if false
示例
以下是一个示例:
在此示例中,我们创建了两个变量 a 和 b,并使用**三元运算符**确定了 b 的值并打印出来。
public class Test { public static void main(String args[]) { int a, b; a = 10; b = (a == 1) ? 20: 30; System.out.println( "Value of b is : " + b ); b = (a == 10) ? 20: 30; System.out.println( "Value of b is : " + b ); } }
输出
Value of b is : 30 Value of b is : 20
instanceof 运算符
此运算符仅用于对象引用变量。运算符检查对象是否为特定类型(类类型或接口类型)。instanceof 运算符写成:
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量引用的对象通过右侧类/接口类型的 IS-A 检查,则结果将为真。以下是一个示例:
示例
在此示例中,我们创建了一个 String 类型的变量 name,然后使用**instanceof 运算符**检查 name 是否为 String 类型。
public class Test { public static void main(String args[]) { String name = "James"; // following will return true since name is type of String boolean result = name instanceof String; System.out.println( result ); } }
输出
true
如果正在比较的对象与右侧的类型赋值兼容,则此运算符仍将返回真。以下是一个示例:
示例
在此示例中,我们创建了一个 Vehicle 类类型的变量 a,然后使用**instanceof 运算符**检查 name 是否为 Car 类型。
class Vehicle {} public class Car extends Vehicle { public static void main(String args[]) { Vehicle a = new Car(); boolean result = a instanceof Car; System.out.println( result ); } }
输出
true
Java 运算符优先级和结合性
运算符优先级决定了表达式中项的组合方式。这会影响表达式的计算方式。某些运算符比其他运算符具有更高的优先级;例如,乘法运算符比加法运算符具有更高的优先级:
例如,x = 7 + 3 * 2;此处 x 被赋值为 13,而不是 20,因为运算符 * 的优先级高于 +,所以它首先与 3 * 2 相乘,然后加到 7 中。
在此,优先级最高的运算符出现在表的最上方,优先级最低的运算符出现在表的最下方。在表达式中,优先级较高的运算符将首先计算。
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | expression++ expression-- | 从左到右 |
一元 | ++expression --expression +expression -expression ⁓ ! | 从右到左 |
乘法 | * / % | 从左到右 |
加法 | + - | 从左到右 |
移位 | << >> >>> | 从左到右 |
关系 | < > <= >= instanceof | 从左到右 |
相等 | == != | 从左到右 |
按位与 | & | 从左到右 |
按位异或 | ^ | 从左到右 |
按位或 | | | 从左到右 |
逻辑与 | && | 从左到右 |
逻辑或 | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %= ^= |= <<= >>= >>>= | 从右到左 |