Java 运算符

按照功能划分:

功能 运算符
算术运算符 +-*/++--%
关系运算符 <<=>>===!=
逻辑运算符 &&||&|!
位运算符 &|~^>>>>><<
赋值运算符 =+=-=*=/=%=
字符串连接符 +
条件运算符 ?:
其他运算符 instanceofnew

算术运算符

关于Java编程中运算符:算术运算符

运算符 作用
+ 相和
- 相减
* 相乘
/ 相除
% 求余
++ 自减
-- 自增
  • % 是求取余数,又称作【取模】
  • ++ 可以出现在变量前或后,运算后变量结果会增加 1 ,有两种使用i++,++i
    • i++:先做赋值运算,再对变量自增
    • ++i:先对变量自增,再做赋值运算
  • --++ 相似只不过变减少 1

注意:一个表达式当中有多个运算符,运算符有优先级、不确定的加小括号,优先级得到提升。不需要刻意去记忆运算符的优先级。

public class OperatorTest {
public static void main(String args[]) { int i = 10;
int j = 3; System.out.println(i + j); // 13
System.out.println(i - j); // 7
System.out.println(i * j); // 30
System.out.println(i / j); // 3 整型与整型计算结果还是整型
System.out.println(i % j); // 1 //------------------------------------------------------------- // ++ 出现在变量后
int k1 = 10;
int m = k1 ++; System.out.println(k1); // 11
System.out.println(m); // 10
// 先做赋值运算,再对变量自增 // ++ 出现在变量前
int k2 = 10;
int n = ++ k2; System.out.println(k2); // 11
System.out.println(n); // 11
// 先对变量自增,再做赋值运算
System.out.println(n); }
}

关系运算符

关于Java编程中运算符:关系运算符

运算符 作用
< 小于
> 大于
<= 小于等于
>= 大于等于
== 等于
!= 不等于
  • 注意区别:= 是赋值运算符;== 是关系运算符。
  • 关系运算符的结果一定是布尔类型:true / false
public class OperatorTest {
public static void main(String args[]) { // 关系运算符的结果
System.out.println(10 > 1); // true
System.out.println(10 < 1); // false
}
}

逻辑运算符

关于Java编程中运算符:逻辑运算符

运算符 作用
& 逻辑与
| 逻辑或
! 逻辑非
^ 逻辑异或
&& 短路与
|| 短路或
  • 逻辑运算符要求两边的算子都是布尔类型,结果也是布尔类型
  • &&\|\|&\| 的区别,前者存在短路,短路与和短路或的执行效率更高(使用较多)
    • && 前面的算子为 false 则后面将不会执行
    • \|\| 前面的算子为 true 则后面将不会执行
public class OperatorTest {
public static void main(String args[]) { System.out.println(5 > 3 & 5 > 2); // true
System.out.println(5 > 3 & 5 > 6); // false /* 短路现象 */
int a = 10; // 使用 &&
System.out.println(false && (a++ > 1)); // false
System.out.println(a); // 10 // 使用 &
System.out.println(false & (a++ > 1)); // false
System.out.println(a); // 11
}
}

位运算【略】

  • 位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
运算符 作用
& 如果相对应位都是1,则结果为1,否则为0
| 如果相对应位都是 0,则结果为 0,否则为 1
~ 按位取反运算符翻转操作数的每一位,即0变成1,1变成0
^ 如果相对应位值相同,则结果为0,否则为1
>> 按位右移运算符。左操作数按位右移右操作数指定的位数
<< 按位左移运算符。左操作数按位左移右操作数指定的位数
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充

赋值运算符

  • 赋值类运算符包括两种:

    • 基本运算符:= 简单的赋值运算符,将右操作数的值赋给左侧操作数
    • 扩展运算符:+=-=*=/=%= 是对于算术运算符中部分内容的简化
  • 赋值类运算符的优先级:先执行等号右边的表达式,在进行赋值给左边的变量

  • 扩展运算符不改变运算结果的类型,使用时注意精度损失

public class OperatorTest {
public static void main(String[] args) { // 基本的赋值运算符
int i = 10; // 扩展运算符,对比
i = i + 5; // 15 先计算 i + 5 , 在赋值给 i
i += 5; // 20 可以理解为 “追加/累加”,效率高于 i = i + 5 //------------------------------------------------------------- // 10 没有超出byte范围,可以直接赋值
byte b = 10; // b = b + 5; 编译错误
/* 编译器只检查语法,不运行程序编译器
编译器发现 b+5 的类型是 int 类型 ,b 变量的类型是 byte , 大容量向小容量转换需要强制类型转换符,所以编译错误 */
b = (byte)(b + 5); // 纠正 byte x = 10;
x += 5; // 编译通过,所以 x += 5 不等同于 x = x + 5
System.out.println(x); // 15 byte z = 0;
z += 128; // 等同于 z = (byte)(z + 128)
System.out.println(x); // -128【精度损失】
}
}

字符串连接符

  • 关于 + 运算符:

    • 加法运算,求和
    • 字符串连接运算
  • 只要 + 运算符两边有一个数据是字符串类型,则是字符串连接运算,运算结果为字符串类型

  • 在一个表达式中出现多个 + ,在没有小括号的前提下,从左向右

public class OperatorTest {
public static void main(String[] args) { System.out.println(10 + 20 + "30"); // "3030" int a1 = 10;
int a2 = 20; // 要求以动态的方式输出 "10 + 20 = 30"
System.out.println(a1 + " + " + a2 + " = " + (a1 + a2)); // 10 + 20 = 30
}
}

三元运算符

  • ?:的语法:

    • 布尔表达式 ? 表达式 : 表达式
  • 当布尔表达式结果为:

    • true 执行 : 前的表达式
    • false 执行 : 后的表达式
public class OperatorTest {
public static void main(String[] args) { boolean sex = false;
char ch = sex ? '男' : '女';
System.out.println(ch); // '女' sex = true;
ch = sex ? '男' : '女';
System.out.println(ch); // '男' }
}


基础章


合集总目录:学习笔记--Java合集

学习笔记--Java 运算符的更多相关文章

  1. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  2. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  3. C++学习笔记之运算符重载

    一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...

  4. Java学习笔记 -- Java定时调度工具Timer类

    1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...

  5. 大数据学习笔记——Java篇之网络编程基础

    Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...

  6. 大数据学习笔记——Java篇之IO

    IO学习笔记整理 1. File类 1.1 File对象的三种创建方式: File对象是一个抽象的概念,只有被创建出来之后,文件或文件夹才会真正存在 注意:File对象想要创建成功,它的目录必须存在! ...

  7. 大数据学习笔记——Java篇之集合框架(ArrayList)

    Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...

  8. [Java学习笔记] Java异常机制(也许是全网最独特视角)

    Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...

  9. 学习笔记——Java类和对象

    今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...

  10. 设计模式学习笔记——java中常用的设计模式

    单例设计模式(Singleton Pattern) 观察者模式(Observer Pattern) 工厂模式(Factory Pattern) 策略模式(Strategy Pattern) 适配器模式 ...

随机推荐

  1. 2024 CISCN WEB 部分wp

    前言 第二天的revenge真是绷不住,出的很好,下次多出点revenge. ezjava 简要介绍 sqlite jdbc...真的没想到,写文件覆盖写了半天,结果是个CVE...,给的很多东西都是 ...

  2. 一个基于 Spring Dubbo 微服务的快速开发脚手架,新手入门必备!

    Spring-dubbo-skeleton 这是一个基于 Spring Dubbo 的快速开发脚手架,Github 地址:https://github.com/yxhsea/spring-dubbo- ...

  3. Android 13 - Media框架(28)- MediaCodec(三)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们了解到 ACodec 执行完 start 流程后,会把所有的 input buffer 都提交给 MediaCodec 层,MediaCo ...

  4. 关于ICMP隧道一点理解(起于修改wien-qq的记住密码)

    起 使用linux半年多以来,一直有一个我很需要但我无法完美解决的东西困扰这我-----(linux QQ) 目前我的解决方案是GitHub上的一个第三方QQ(有关ICMP隧道的搭建见 承,转) 但是 ...

  5. 使用C代码实现读取文件中的hex字符串,转换为字节数组

    举例说明: ptp.txt文件中的内容为: 7a7ac0a8c80100000000003388f70002002c000004000000000000000000000000000000000000 ...

  6. idea mapper xml 文件报红

    在使用 idea 打开 mapper 文件,出现一下报红错误: 可以看到数据表和字段都是红色的. 解决方案 打开设置,window版本是打开Settings: 找到 Languages & F ...

  7. 2023 Hive 面试宝典

    先说一些废话 总结一下Hive面试宝典,方便读者快速过一遍Hive面试所需要的知识点 Hive的介绍 Hive和Hadoop的关系 Hive利用hdfs存储数据,利用MapReduce查询数据 Hiv ...

  8. NaN数值类型

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  9. C# .NET HttpWebRequest 按每个(单个)请求跳过证书校验

    C# .NET HttpWebRequest 按每个(单个)请求跳过证书校验 自签名证书 HTTPS TLS . 使用.NET 4.5 新加的属性 HttpWebRequest.ServerCerti ...

  10. FlashDuty Changelog 2023-12-18 | 值班管理、服务日历、自定义操作和邮件集成

    FlashDuty:一站式告警响应平台,前往此地址免费体验! 值班管理 UI 交互优化 [个人日程]从头像下拉菜单调整到值班列表页面,快速查看个人值班日程 [值班列表]支持原地预览最近一周值班情况,包 ...