学习笔记--Java 运算符
Java 运算符
按照功能划分:
功能 | 运算符 |
---|---|
算术运算符 | + 、- 、* 、/ 、++ 、-- 、% |
关系运算符 | < 、<= 、> 、>= 、== 、!= |
逻辑运算符 | && 、|| 、& 、| 、! |
位运算符 | & 、| 、~ 、^ 、>> 、>>> 、<< |
赋值运算符 | = 、+= 、-= 、*= 、/= 、%= |
字符串连接符 | + |
条件运算符 | ?: |
其他运算符 | instanceof 、new |
算术运算符
关于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 运算符的更多相关文章
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- C++学习笔记之运算符重载
一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...
- Java学习笔记 -- Java定时调度工具Timer类
1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...
- 大数据学习笔记——Java篇之网络编程基础
Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...
- 大数据学习笔记——Java篇之IO
IO学习笔记整理 1. File类 1.1 File对象的三种创建方式: File对象是一个抽象的概念,只有被创建出来之后,文件或文件夹才会真正存在 注意:File对象想要创建成功,它的目录必须存在! ...
- 大数据学习笔记——Java篇之集合框架(ArrayList)
Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...
- [Java学习笔记] Java异常机制(也许是全网最独特视角)
Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...
- 学习笔记——Java类和对象
今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...
- 设计模式学习笔记——java中常用的设计模式
单例设计模式(Singleton Pattern) 观察者模式(Observer Pattern) 工厂模式(Factory Pattern) 策略模式(Strategy Pattern) 适配器模式 ...
随机推荐
- 2024 CISCN WEB 部分wp
前言 第二天的revenge真是绷不住,出的很好,下次多出点revenge. ezjava 简要介绍 sqlite jdbc...真的没想到,写文件覆盖写了半天,结果是个CVE...,给的很多东西都是 ...
- 一个基于 Spring Dubbo 微服务的快速开发脚手架,新手入门必备!
Spring-dubbo-skeleton 这是一个基于 Spring Dubbo 的快速开发脚手架,Github 地址:https://github.com/yxhsea/spring-dubbo- ...
- Android 13 - Media框架(28)- MediaCodec(三)
关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们了解到 ACodec 执行完 start 流程后,会把所有的 input buffer 都提交给 MediaCodec 层,MediaCo ...
- 关于ICMP隧道一点理解(起于修改wien-qq的记住密码)
起 使用linux半年多以来,一直有一个我很需要但我无法完美解决的东西困扰这我-----(linux QQ) 目前我的解决方案是GitHub上的一个第三方QQ(有关ICMP隧道的搭建见 承,转) 但是 ...
- 使用C代码实现读取文件中的hex字符串,转换为字节数组
举例说明: ptp.txt文件中的内容为: 7a7ac0a8c80100000000003388f70002002c000004000000000000000000000000000000000000 ...
- idea mapper xml 文件报红
在使用 idea 打开 mapper 文件,出现一下报红错误: 可以看到数据表和字段都是红色的. 解决方案 打开设置,window版本是打开Settings: 找到 Languages & F ...
- 2023 Hive 面试宝典
先说一些废话 总结一下Hive面试宝典,方便读者快速过一遍Hive面试所需要的知识点 Hive的介绍 Hive和Hadoop的关系 Hive利用hdfs存储数据,利用MapReduce查询数据 Hiv ...
- NaN数值类型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- C# .NET HttpWebRequest 按每个(单个)请求跳过证书校验
C# .NET HttpWebRequest 按每个(单个)请求跳过证书校验 自签名证书 HTTPS TLS . 使用.NET 4.5 新加的属性 HttpWebRequest.ServerCerti ...
- FlashDuty Changelog 2023-12-18 | 值班管理、服务日历、自定义操作和邮件集成
FlashDuty:一站式告警响应平台,前往此地址免费体验! 值班管理 UI 交互优化 [个人日程]从头像下拉菜单调整到值班列表页面,快速查看个人值班日程 [值班列表]支持原地预览最近一周值班情况,包 ...