比较重要
- 变量的转换类型
- 算术运算符
- 赋值运算符
特别重要
- 关系运算符
- 逻辑运算符
- 位运算符
- 三元(三目运算符)
变量相关
定义变量的注意事项
- java语言不能重复定义同一变量
例如:int a = 3;
int a = 4;
这样的语法是错误的
- 代码书写要规范,定义完变量写了分号,立马另起一行重新定义变量或者继续代码
(有的面试题是可以的)- 目前定义的变量都在main当中,方法中定义的变量都称作"局部变量"
局部变量在使用前必须初始化,必须要有初始化值!!
强转以及自动转换
/* 面试题: 第一题: byte b1=10,b2=20,b; b=b1+b2; b=10+20; 哪句是编译失败的呢?为什么呢? 考点: 1)Java隐式类型转换 2)Java强转类型转换 3)变量相加和常量相加的区别 变量相加:要考虑这个两个变量的数据类型, b =b1 +b2 ; b1和b2都是byte类型,当前参与运算,b1和b2先提升为int,结果应该int类型 而b是byte类型,无法接收int类型的结果,必须强制类型转换 常量相加:先相加,然后看计算结果是否在固定的类型范围内,在范围内就直接赋值了! */
在上述的案例中,b1以及b2都是byte 类型,占用一个字节,参与运算时,自动提升为int类型
b = b1 + b2;
上述代码右边进行运算之后,结果需要被byte类型的变量接手,会造成数据损失,长字节变成短字节,所以要进行强转,也就是显式转换
应当更改为
b = (byte )(b1 + b2);
常量相加的逻辑:先相加,看运算结果是否在类型的范围之内,如果未超范围,直接赋值,不会报错.
作业题
byte x = 129; 是否编译通过,结果是多少,计算过程;
byte x = 129 ,编译不正确,超出了类型的取值范围
强制转换后赋值,计算方法如下:
byte x = (byte)129;
第一步,先写出129的二进制值
(00000000 00000000 00000000 ) 100000001 原码
正数原码反码补码相
第二步,进行数据截取,红色部分丢弃
截取后的补码: 100000001
最高符号位 数值位
1 0000001
反码 1 0000000
原码 1 1111111
结果 - 64+32+16+8+4+2+1
最终得到的结果是-127
练习题
请输出x的值,写计算过程
byte x = (byte)300;
写出300的二进制数
00000000 00000000 00000001 00101100
原码,反码,补码相同,截取补码进行计算
(00000000 00000000 00000001) 00101100
截取后补码: 00101100
最高符号位 数值位
0 0101100 补码
0 0101100 反码
0 0101100 原码
计算结果: 32+8+4=44
class Change3{
public static void main(String[] args){
byte x = (byte)300;
System.out.println(x) ;
}
}
输出结果:
算数运算符
- 基本算术运算符:+,-,*,/,%(模),求余数
- 扩展的算术运算符:++或者--
注意事项:/:在Java语言中默认取整,
比如
int a = 3 ;
int b = 4 ;System.out.println(a/b) ;
其结果是 0 ,默认取整.
但是,如果参与数据计算有小数.提升double类型
赋值运算符
基本赋值运算符 =
将等号右边的值赋值给=左边的变量
扩展的赋值运算符:
+= ,-=, *=, /=, %=
举例:%=
class Number{ public static void main(String[] args){ int a = 100 ; a %= 30 ; //都是int类型 等价于 int a = a%200 ; System.out.println("a:"+a) ; } }
结果输出:a为10
关系运算符(比较运算符)
注意,关系运算符输出结果是 ture or false
<, <=, >, >=, ==, !=(非等于,真变假,假变真)
步骤:
- 定义变量
- 直接输出结果 或者 使用布尔类型变量接受结果
逻辑运算符
项目 | 逻辑运算符 | 扩展的逻辑运算符 |
---|---|---|
与 & | 逻辑单与&(并列关系(交集),有false,则false) | 逻辑双与&&(有false,则false,有短路效果) |
或 | | 逻辑单或|(或的关系(并集),有true,则true) | 逻辑双或||(有true,则true!有短路效果) |
异或^ | 逻辑异或^(相同则为false,不同则为true) | / |
非! | 逻辑非!(非true,则false;非false,则true;) | / |
位运算符(比较记忆)
注意:
逻辑运算符用于连接布尔型表达式
位运算是直接对二进制进行运算。
左移,右移,无符号右移
<< 相当于乘以2的多少次幂。
>> 相当于除以2的多少次幂。
>>>被移位二进制最高位无论是0或者是1,空缺位都用0补。