Java运算符学习笔记
运算符
-运算符介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
- 算数运算符
- 赋值运算符
- 关系运算符[比较运算符]
- 逻辑运算符
- 位运算符[需要二进制基础]
- 三元运算符
-算数运算符
-
介绍
算数运算符是对数值类型的变量进行运算的,在Java程序中使用的非常多。
-
算数运算符一览
运算符 | 运算 |
---|---|
+ | 正号 |
- | 负号 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模(取余) |
++(前)、++(后) | 自增(前):先运算后取值;自增(后):先取值后运算 |
–(前)、–(后) | 自减(前):先运算后取值;自减(后):先取值后运算 |
+ | 字符串相加 |
-
面试题
public class ArithmeticOperatorExercise01{public static void main(String[] args){int i=1;i=i++;//temp=i;i=i+1;i=tempSystem.out.println(i);//1int j=1;j=++j;//j=j+1;temp=j;j=temp;System.out.println(j);//2} }
-
课堂练习2
public class ArithmeticOperatorExercise02{public static void main(String[] args){//1. 假如还有59天放假,问:合xx个星期零xx天int gap=59;//距离放假的天数int weeks=gap/7;//周int days=gap-weeks*7;//天System.out.println("合"+weeks+"个星期零"+days+"天");//2.定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。[234.5]double fTem=234.5;double cTem=5/9.0*(fTem-100);System.out.println(fTem+"华摄氏度对应的摄氏度是"+cTem);} }
-关系运算符(比较运算符)
- 介绍
- 关系运算符的结果都是boolean型,也就是要么是true,要么是false。
- 关系表达式经常用在if结构的条件中或循环结构的条件中。
运算符 | 运算 |
---|---|
== | 相等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
instanceof | 检查是否是类的对象 |
- 细节说明
- 关系运算符的结果都是boolean型,也就是要么是true,要么是false
- 关系运算符组成的表达式,我们称为关系表达式。a>b
- 比较运算符“==”不能误写成"="
-逻辑运算符
-
介绍
用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值
-
逻辑运算符一览
- 短路与&&,短路或||,取反!
- 逻辑与&,逻辑或|,^逻辑异或
-
逻辑运算符一览
- a&b:& 叫逻辑与:规则:当a和 b同时为true ,则结果为true,否则为false。
- a&&b:&& 叫短路与:规则:当a 和 b同时为true,则结果为true,否则为false。
- a l b 😐 叫逻辑或,规则:当a和b,有一个为true,则结果为true,否则为false。
- a||b:|| 叫短路或,规则:当a 和 b,有一个为true ,则结果为true,否则为false。
- ! a:叫取反,或者非运算。当a 为true,则结果为false,当a为false时,结果为true。
- a^b: 叫逻辑异或,当a和b不同时,则结果为true, 否则为false。
-
&&和&基本规则
名称 语法 特点 短路与&& 条件1&&条件2 两个条件都为true,结果为true 逻辑与& 条件1&条件2 两个条件都为true,结果为true -
&&和&使用区别
- &&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false效率高
- & 逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
- 开发中,我们使用的基本是短路与&&,效率高
●||和|基本规则名称
名称 | 语法 | 特点 |
---|---|---|
短路或|| | 条件1||条件2 | 两个条件中只要有一个成立,结果为true |
|逻辑或 | 条件1|条件2 | 只要有一个条件成立,结果为true |
- ||和|使用区别
- ||短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
- |逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
- 开发中,我们基本使用||
-
!取反与^逻辑异或基本规则
名称 语法 特点 !非(取反) !条件 如果条件本身成立,结果为false,否则为true ^逻辑异或 a^b 当a和b不同时结果为true,否则为false -
用以连接多个条件(多个关系表达式),最终的结果也是一个boolean值
-赋值运算符
-
介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。
-
赋值运算符的分类
基本赋值运算符 =
复合赋值运算符 +=、-=、*=、/=、%=等
-
赋值运算符特点
-
运算顺序从右往左int num= a+b+c;
-
赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
int num = 20; int num2= 78*34 -10; int num3 = a;
-
复合赋值运算符等价于下面的效果
比如:a+=3:等价于a=a+3:
-
复合赋值运算符会进行类型转换。
byte b = 2; b+=3; b++;
-
-三元运算符
-
基本语法
条件表达式?表达式1:表达式2;
- 如果条件表达式为true,运算后的结果是表达式
- 如果条件表达式为false,运算后的结果是表达式
-
使用细节
- 表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换)
- 三元运算符可以转成if–else 语句
-运算符优先级
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
- 只有单目运算符、赋值运算符是从右向左运算的。
. () {} ; , | |
---|---|
R->L | ++ – ~ !(data type) |
L->R | * / % |
L->R | + - |
L->R | << >> >>> 位移 |
L->R | < > <= >= instanceof |
L->R | == != |
L->R | & |
L->R | ^ |
L->R | | |
L->R | && |
L->R | || |
L->R | ? : |
R->L | = *= /= %= |
+= -= <<= >>= | |
>>>= &= ^= |= |
- 优先级梳理
- 括号
- 单目运算符
- 算数运算符
- 位移运算符
- 比较运算符
- 逻辑运算符
- 三元运算符
- 赋值运算符
-标识符的命名规则和规范
-
标识符概念
- Java 对各种变量、方法和类等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符 int num1=90;
-
标识符的命名规则(必须遵守)
- 由26个英文字母大小写,0-9,_或$组成
- 数字不可以开头,如int 3ab =1;
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java中严格区分大小写,长度无限制。int totalNum=10; int n=90;
- 标识符不能包含空格。int a b=90;
-
标识符命名规范
- 包名:多单词组成时所有字母都小写:aaa.bbb.ccc//比如com.hsp.crm
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZ22比如:TankShotGame
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz比如:tankShotGame
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXXYYYZZZ比如 :定义一个所得税率 TAX RATE
- 后面我们学习到 类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档.
-关键字
-
关键字的定义和特点(不用背)
-
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
-
特点:关键字中所有字母都为小写
-
-
各种关键字:
- 用于定义数据类型的关键字:class、interface、enum、byte、short、int、long、float、double、char、boolean、void
- 用于定义数据类型值的关键字:true、false、null
- 用于定义流程控制的关键字:if、else、switch、case、default、while、do、for、break、continue、return
- 用于定义访问权限修饰符的关键字:private、protected、public
- 用于定义类、函数、变量修饰符的关键字:
- 用于定义类与类之间关系的关键字:extends、implements
- 用于定义建立实例及引用实例,判断实例的关键字:new、this、super、instanceof
- 用于处理异常的关键字:try、catch、finally、throw、throws
- 用于包的关键字:package、import
- 其他修饰符关键字:native、strictfp、transient、volatile、assert
-保留字
-
介绍
Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字byValue、cast,future、 generic、 inner、 operator、 outer、 rest、 vargoto 、const
-键盘输入语句
-
介绍
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java,需要一个 扫描器(对象),就是 Scanner -
步骤:
1)导入该类的所在包,java.util.*2)创建该类对象(声明变量)
3)调用里面的功能
-
案例
import java.util.Scanner; public class InputExercise{public static void main(String[] args){//初始化Scanner对象Scanner input=new Scanner(System.in);//接收用户输入System.out.println("请输入姓名:");String name=input.next();System.out.println("请输入年龄:");int age=input.nextInt();System.out.println("请输入薪水:");double salary=input.nextDouble();//输出接收的用户输入System.out.println("姓名是"+name+"\n年龄是"+age+"\n薪水是"+salary);} }
-进制
-
进制介绍
对于整数,有四种表示方式:
- 二进制:0,1,满2进1.以0b或0B开头。
- 十进制:0-9 ,满10进1
- 八进制:0-7,满8进1.以数字0开头表示
- 十六进制:0-9及A(10)-F(15),满16进1.以0x或0X开头表示。此处的A-F不区分大小写。
-
进制演示
public class baseExercise{public static void main(String[] args){//二进制、十进制、八进制、十六进制整数int num0=0b1010;int num1=1010;int num2=01010;int num3=0x1010;System.out.println(num0);System.out.println(num1);System.out.println(num2);System.out.println(num3);}
}
-
二进制转十进制:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方然后求和。
-
八进制转十进制:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方然后求和。
-
十六进制转十进制:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方然后求和。
-
十进制转其他进制:将该数不断除以其他进制的base,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
-
二进制转换成八进制:从低位开始,将二进制数每三位一组,转成对应的八进制数即可
-
二进制转换成十六进制:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可
-
八进制转换成二进制:将八进制数每1位,转成对应的一个3位的二进制数即可
-
十六进制转换成二进制:将十六进制数每1位,转成对应的一个4位的二进制数即可
-
二进制在运算中的说明
- 二进制是逢2进位的进位制,0、1是基本算符。
- 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。
-原码、反码、补码(重点难点)
网上对原码,反码,补码的解释过于复杂,我这里精简几句话:
对于有符号的而言:
- 二进制的最高位是符号位:0表示正数,1表示负数(口诀:0->01->-)
- 正数的原码,反码,补码都一样(三码合一)
- 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
- 负数的补码=它的反码+1,负数的反码= 负数的补码-1
- 0的反码,补码都是0
- java没有无符号数,换言之,java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的
- 当我们看运算结果的时候,要看他的原码(重点)
-位运算符
-
java中有7个位运算(&、|、^、~、>>、<<和 >>>)
-
分别是 按位与&、按位或|、按位异或^,按位取反~,算数右移>>、算数左移<<,逻辑右移>>>(没有逻辑左移!),它们的运算规则是:
-
按位与&:两位全为1,结果为1,否则为0
-
按位或|:两位有一个为1,结果为1,否则为0
-
按位异或^:两位不同结果为1,否则为0
-
按位取反~:0变1,1变0
-
算数右移>>:符号位不变,低位溢出,用符号位补足高位
-
算数左移<<:符号位不变,低位补0
-
逻辑右移>>>:符号位参与右移,低位溢出,高位补0
-