Java运算符学习
运算符包含:
- 算术运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 三元运算符
算数运算符
-
面试题1:
-
int i = 1; i = i++; System.out.println(i);//1 先赋值再自增 //规则使用临时变量:(1)temp = i;(2)i =i + 1;(3)i = temp;
-
-
面试题2:
-
int i = 1; i = ++i; System.out.println(i);//2 先自增再赋值 //规则使用临时变量:(1)i =i + 1;(2)temp = i;(3)i = temp;
-
关系运算符
- instanceof,检查是否是类的对象
"dmm" instanceof String//true
- 细节说明
- 关系运算符的结果都是布尔类型(boolean),即true / false
- 关系运算符组成的表达式,称为关系表达式
- 比较运算符"==“不要误写为”="
逻辑运算符
- 用于连接多个关系表达式,运算结果也是一个boolean值
- 短路与&&和逻辑与&
- 都是两个条件均为true时,结果为true,否则均为false
- 区别
- &&短路与:若第一个条件为false,则第二个条件不会判断,最终结果为false
- &逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
- 注意:开发中,基本都是使用短路与&&,效率高
- 短路或||与逻辑或|
- 都是只要有一个条件成立,结果为true
- 区别
- ||短路或:当第一个条件为true,则第二个条件不会判断,最终结果为true
- |逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
- 注意:开发中,基本都是使用短路或||,效率高
-
- 注意y=true为赋值语句,此时该条件为真,执行z++;同样,x=false为赋值语句,此时该条件为假,最终结果z=50
赋值运算符
-
基本赋值运算符:=
-
复合赋值运算符:+=,-=,*=,/=,%=,如a+=b等价于a=a+b
-
赋值运算符特点:
-
运算顺序从右到左
-
赋值运算符的左边只能是变量,右边可以是变量、表达式或常量值
-
复合赋值运算符会进行类型转换
-
byte b = 3; b += 2;//等价于b = (byte)(b + 2),即字节型常量与整数型常量2相加运算后为整型常量, //后自动进行类型转换为byte类型常量 b = b + 2;//会由于数据类型不兼容而报错,无法从高精度自动转为低精度
-
-
三元运算符
-
语法:条件表达式?表达式1:表达式2;
-
运算规则:
-
若条件为true,返回表达式1
-
若条件为false,返回表达式2
-
int a = 10; int b = 99; int result = a > b ? a++ : b--; System.out.println("result=" + result); //条件为false,先返回b的值,再执行b自减,result=99 int result = a > b ? a++ : --b; System.out.println("result=" + result); //先自减再返回值,result=97
-
-
三元运算符细节
- 表达式1、2要为可以赋给接收变量的类型(或可以自动转换),或者强制转换数据类型后再赋值
运算符优先级
- 上图中,上一行运算符总优先于下一行
- 只有单目运算符、赋值运算符是从右向左运算的
- 优先级由高到低为:(),{};单目运算符;算术运算符;比较运算符;逻辑运算符;三元运算符;赋值运算符
标识符命名规则与规范
Java对各种变量、方法、类等命名时使用的字符序列称为标识符
标识符命名规则
- 由26个英文字母,0-9,_或$构成
- 不能以数字开头
- 不可以使用关键字和保留字,但可以包含关键字和保留字
- 关键字:被Java语言赋予了特殊含义,用作专门用途的字符串
- 关键字中所有字母均小写,如static,interface等
- 保留字:现有Java版本尚未使用,但以后版本可能作为关键字使用,自己命名时要避免使用这些保留字,如:byvalue,cast,future,generic,inner,operator,outer,rest,var,goto,const等
- Java中严格区分大小写,标识符长度无限制
- 关键字:被Java语言赋予了特殊含义,用作专门用途的字符串
- 标识符不可包含空格
标识符命名规范
- 包名:多单词组成时所有字母都小写:aaa.bbb.ccc,如:com.dmm.crm
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,从第二个单词开始每个单词首字母大写:xxxYyyZzz,如tankShotGame
- 常量名:所有字母都大写,多单词时每个单词间用下划线_连接:XXX_YYY_ZZZ,如TAX_RATE
键盘输入语句
用途:接收用户输入的数据;需要用到一个扫描对象,就是Scanner类
使用步骤:
- 导入该类所在的包
import java.util.Scannner
- 创建该类对象(声明变量)
- 调用该类相关功能
原码、反码、补码
- 二进制的最高位为符号位,0为证1为负
- 正数的原码、反码、补码相同(三码合一)
- 负数的反码=原码符号位不变,其他位按位取反
- 负数的补码=其反码+1,负数反码=其补码-1
- 0的反码、补码都是0
- java中的数都是有符号的
- 计算机运算时,都是以补码的方式运算的
- 当我们看运算结果时,要看它的原码
位运算符
-
Java有七个位运算符:&,|,^,~,>>,<<,和>>>
-
>>为算术右移:低位溢出,符号位不变,并用符号位补溢出的高位
-
<<为算数左移:符号位不变,低位补0
-
>>>为逻辑右移(无符号右移):低位溢出,高位补0
-
int a = 1 >> 2;//00000001=>00000000=>00000000本质为1 / 2 / 2 int c = 1 << 2;//00000001=>00000010=>00000100本质为1 * 2 * 2
为逻辑右移(无符号右移):低位溢出,高位补0
-
int a = 1 >> 2;//00000001=>00000000=>00000000本质为1 / 2 / 2 int c = 1 << 2;//00000001=>00000010=>00000100本质为1 * 2 * 2