Java学习笔记02
1. 运算符和表达式
运算符
就是对常量或者变量进行操作的符号。
如:+ - * /
表达式
用运算符把常量或者变量连接起来的,符合Java语法的式子就是表达式。
如:a + b
其中,+
是算术运算符的一种,所以这个表达式也称为算术表达式。
2. 算术运算符
+、-、*、/、%
运算特点:
+ - * :跟小学数学中的加减乘一模一样,没有任何区别。
/ :
1. 整数相除结果只能得到整数(小数取整数部分),如果结果想要是小数,必须要有小数参数。
2. 小数直接参与运算,得到的结果有可能是不精确的。
案例:
System.out.println(10 / 3);//3
System.out.println(10.0 / 3)//3.3333333333333335
% :取模、取余,也是进行除法运算,只不过获取的是余数。
案例:
System.out.println(10 % 2);//0
System.out.println(10 % 3);//1
3. 隐式转换
概念
也叫自动类型转换。就是把一个取值范围小的数据或者变量,赋值给另一个取值范围大的变量时,不需要我们额外写代码单独实现,程序自动帮我们完成的功能。
转换规则
- 取值范围小的和取值范围大的进行运算,先把小的转换为大的,再进行运算。
byte
、short
、char
三种类型的数据在运算时,都会直接先转换为int,然后再进行运算。
取值范围大小关系:byte < short < int < long < float < double
4. 强制转换
概念
如果要把一个取值范围大的数据或者变量赋值给另一个取值范围小的变量,Java中是不允许直接操作的,如果一定要这样干,就需要加入强制转换。
书写格式
目标数据类型 变量名 = (目标数据类型) 被强制转换的数据或变量名
注意:强制转换可能会导致数据的精度丢失。
5. 字符串的+操作
规则
- 当+操作中出现字符串时,
+
就是字符串的连接符,会将前后的数据进行拼接,并产生一个新的字符串。 - 当连续进行+操作时,执行顺序时从左到右逐个执行。
案例
案例1:
1 + "abc" + 1
结果:"1abc1"
案例2:
1 + 2 + "abc" + 2 +1
结果:"3abc21"
6. 字符的+操作
规则
当+操作中出现了字符,会转换为计算机内置的ASCII
码表中对应的数字,然后再进行运算。
案例
char c = 'a';
int result = c + 0;
System.out.println(result);//97
7. 自增/自减运算符
++ 自增运算符,就是把变量里面的值+1
-- 自减运算符,就是把变量里面的值-1
自增/自减运算符可以放在变量的前面和后面,如:++a
,a++
8. 赋值运算符
= 赋值运算符
运算过程:就是把等号右边的结果赋值给左边的变量。
注意:
在赋值运算中,当自增/自减运算符出现在变量前时,先对变量进行自增/自减运算,再赋值。
在赋值运算中,当自增/自减运算符出现在变量后时,先赋值,再对变量进行自增/自减运算。
案例:
int a = 10;
int b = ++a;
System.out.println(a);//11
System.out.println(b);//11
int c = 10;
int d = c++;
System.out.println(c);//11
System.out.println(d);//10
//自减运算符同理
9. 扩展赋值运算符
+=、-=、*=、/=、%=
规则
把左边跟右边进行运算,最终结果赋值给左边,对右边无任何影响。
案例
int a = 10;
int b = 20;
a += b;//相当于a = a + b
System.out.println(a);//30
System.out.println(b);//20
注意:
扩展赋值运算符中隐层还包含了一个强制转换。
以
+=
为例:a += b
实际上相当于a = (byte)(a + b)
。
10. 关系运算符
又称为比较运算符。
符号 | 解释 |
---|---|
== | 就是判断左边跟右边是否相等,如果成立就是true,如果不成立就是false |
!= | 就是判断左边跟右边是否不相等,如果成立就是true,如果不成立就是false |
> | 就是判断左边是否大于右边,如果成立就是true,如果不成立就是false |
>= | 就是判断左边是否大于等于右边,如果成立就是true,如果不成立就是false |
< | 就是判断左边是否小于右边,如果成立就是true,如果不成立就是false |
<= | 就是判断左边是否小于等于右边,如果成立就是true,如果不成立就是false |
注意:
- 关系运算符的运算结果一定是布尔类型(boolean)。
==
是判断左右两边是否相等的关系运算符,而=
是赋值运算符
11. 逻辑运算符
&:逻辑与(而且)
两边都为真,结果才是真,只要有一个为假,结果就是假。
|:逻辑或(或者)
两边都为假,结果才是假,只要有一边为真,结果就是真。
^:异或
如果两边相同,结果为false
;如果两边不相同,结果为true
。
!:取反
false
取反就是true
,true
取反就是false
。
注意:取反最多只用一个。
12. 短路逻辑运算符
&&
运算规则与&
是一致的,具有短路效果。
||
运算规则与|
是一致的,具有短路效果。
短路效果
当左边不能确定整个表达式的结果时,右边才会执行。反之,当左边能确定整个表达式的结果时,右边不会执行。这样做可以提高代码的运行效率。
注意:
&&
和&
、||
和|
的运行结果是一致的,但是短路逻辑运算符可以提高程序的运行效率,所以更推荐使用短路逻辑运算符。
13. 三元运算符
格式
关系表达式 ? 表达式1 : 表达式2;
运算规则
- 计算关系表达式的值
- 如果关系表达式的值为
true
,执行表达式1 - 如果关系表达式的值为
false
,执行表达式2
注意:三元运算符的最终结果一定要被使用,要么赋值给一个变量,要么打印输出。
Java学习笔记02的更多相关文章
- Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式
一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...
- 【8-20】java学习笔记02
others 初始化块在构造器前执行: 静态初始化块和实例变量显示初始化执行顺序为各自定义的位置: final类不能派生子类,final方法不可覆盖,final变量不可重新赋值: 判定值相等,Stri ...
- Java学习笔记:02面向对象-重写_this_super_抽象类
02面向对象-重写/this/super/抽象类 ****1.this和super 作用: this: 区分本类的成员变量和局部变量同名情况 super:区分父类的成员变量和局部变量同名情况 用法: ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- Redis:学习笔记-02
Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
随机推荐
- spring为什么默认单例模式
单例bean的优势 由于不会每次都新创建新对象所以有一下几个性能上的优势. 1.减少了新生成实例的消耗 新生成实例消耗包括两方面,第一,spring会通过反射或者cglib来生成bean实例这都是耗性 ...
- SQL语句底层执行顺序
1. SELECT 语句的完整结构 SQL92语法: SELECT ...,....,(存在聚合函数) FROM ...,...,... WHERE 多表的连接条件 AND 不包含聚合函数的过滤条件 ...
- 【内存管理】CMA内存分配器(Contiguous Memory Allocator)
什么是CMA 参考这两篇博文,写得很好: http://www.wowotech.net/memory_management/cma.html https://www.cnblogs.com/Loye ...
- 汇编程序 - TD调试
为了写这个Blog,无奈的我深夜打开虚拟机,希望也能帮助一些人,因为好像真的有人不会欸!(→_→) 写在前面的话: 1. TD面板下的调试十分重要.可以观察内存(GOTO DS:XXXX)存放的位置与 ...
- F. K-th Power 容斥,莫比乌斯
F. K-th Power 传送门: 牛客:https://ac.nowcoder.com/acm/contest/34866/F cf:https://codeforces.com/group/5z ...
- JAVA获取MultipartFile文件的MD5
Java获取文件的MD5,核心都是通过JAVA自带的MessageDigest类来实现. 获取文件MD5值主要分为三个步骤: 第一步获取文件的byte信息, 第二步通过MessageDigest类进行 ...
- 关于两行代码让我时间无限拉长这件事------mainServlet
在再一次尝试实现增删改查的功能时,出现了一些BUG,修改功能一直实现不了,查了好久的资料,这才发现问题 如上图所示,这个Servlet里面定义的方法,虽然很短,但是重要的很奥,改了好久都没注意到这个问 ...
- 阿里云镜像创建Spring Boot工厂
参考博客:https://blog.csdn.net/qq_40052237/article/details/115794368 http://start.aliyun.com
- GaussDB(DWS)运维:导致SQL执行不下推的改写方案
摘要:本文就针对因USING子句的书写方式可能导致MERGE INTO语句的执行不下推的场景,对USING子句的SQL语句进行改写一遍,整个SQL语句可以下推. 本文分享自华为云社区<Gauss ...
- [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程
不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...