目录
一.不同数据类型的打印
1. float a = 3.5; int b = a; 打印b的结果是什么
无法打印,因为 a是float型,b是int型。a到b是float-->int属于向下转型,需要强制类型转换。
2. int a = 5; float b = a; 打印b的结果是什么
a是int型,b是float型。a到b是int-->float属于向上转型,自动转型。
3. char a = 'A'; int b = a; 打印b的结果是什么
将char类型的a 转化到int类型的b, 从字符集中找到A的数值 赋值给b
4. int a = 68; char b = a; 打印b的结果是什么
无法打印,因为 a是int型,b是char型。a到b是int-->char属于向下转型,需要强制类型转换。
二.基本数据类型的兼容关系图
三.变量命名规则:
驼峰命名法:
驼峰命名法是指多个单词组合在一起标识一个特定的含义时,第一个单词全部小写,第二个以及之后的单词首字母大写其余小写的命名规则,其中分为小驼峰法与大驼峰法
1.大驼峰
- 全部单词首字母大写,如
CheckName
- 主要用于接口名和类名
2.小驼峰
- 第一个单词首字母小写,其他单词首字母大写,如
getMyName
- 一般用于变量名和方法名
连字符命名法:
单词之间通过连字符“-”连接,比如“background-color”
四.运算符
1.算数运算符
运算符 | 含义 |
---|---|
+ | 求和 |
- | 相减 |
* | 乘积 |
/ | 商 |
% | 求余数(求模) |
++ | 自加1 |
- - | 自减1 |
1. ++运算符
当++出现在变量前,会先自加一
,在做赋值运算
int x = 100;
int y = ++x;
步骤: ② ①
System.out.println(x); // 101
System.out.println(y); // 101
(2)++在变量后
当++出现在变量后,会先做赋值运算
,再自加1
int m = 20;
int n = m++;
步骤: ① ②
System.out.println(n); // 20
System.out.println(m); // 21
(3) 特别地,在print中
int c = 90;
System.out.println(c++); // 传,这个“传”在这里有一个隐形的赋值运算。90
// 把上面代码拆解开
//int temp = c++;
//System.out.println(temp);
int d = 80;
System.out.println(++d); //81
// 拆解
//int temp2 = ++d;
//System.out.println(temp2);
2. - - 运算符(例子同++运算符)
当–出现在变量前,会先自减一
,在做赋值运算
当–出现在变量后,会先做赋值运算
,再自减1
注意:
对于++运算符来说:
1.可以出现在变量前,也可以出现在变量后。
2.不管出现在变量前还是后,总之++执行结束之后,变量的值一定会自加1。
2.比较运算符
运算符 | 含义 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
注意:所有的关系运算符的运算结果都是布尔类型,不是true就是false,不可能是其他值。
3.逻辑运算符
运算符 | 含义 | 结果 |
---|---|---|
& | 逻辑与(可以翻译成并且) | 两边都是true,结果才是true |
│ | 逻辑或(可以翻译成或者) | 有一边是true,结果就是true |
! | 逻辑非(取反) | !true = false、!false = true |
&& | 短路与 | 两边都是true,结果才是true |
││ | 短路或 | 有一边是true,结果就是true |
4.赋值运算符
运算符 | 含义 |
---|---|
= | 赋值 |
+= | 加等(原先的基础上加上/追加这个数) |
-= | 减等(同理) |
*= | 乘等(同理) |
/= | 除等(同理) |
%= | 模等(同理) |
5.位运算符
运算符 | 含义 |
---|---|
& | 按位与,当两位同时为1时才返回1 |
| | 按位或,只要有一位为1即返回1 |
~ | 按位非,单目运算符,将操作数的每个位(包括符号位)全部取反 |
^ | 按位异或,当两位相同时返回0,不同时返回1 |
<< | 左移运算符 |
>> | 右移运算符 |
>>> | 无符号右移运算符 |
左移和右移
左移
<<
8 << 2 左移两位 相当于 8*4
高位 -- 低位
0000 1000
高位舍弃2位 低位以0填充
0010 0000
右移
>>:有符号右移,正数最高位补0,负数最高位补1
8 >> 2 右移两位 相当于 8/4
高位 -- 低位
0000 1000
高位以0填充 低位舍弃2位
0000 0010
>>>:无符号右移,无论正数或负数,最高位都是补0
如何最快速计算 8*4 8<<2
如何最快速计算 8/4 8>>2
6.单目运算符
单目(一元):运算符只对一个操作数进行运算
运算符 | 含义 |
---|---|
~ | 按位非 |
i++ | 自增 |
!a | 逻辑取反 |
7.双目运算符
双目:运算符对两个操作数进行运算(很多)
3 + 4
5 - 2
6 * 7
8 / 2
10%3
a > b ........
8.三目运算符
三目:运算符对三个操作数进行运算
? :
五.运算符中的一些区别
1.=和==的区别
=:赋值运算符,将右边的值赋值给左边,例如 a = b 即将b的值赋给a。
==:比较运算符,判断左右两边值是否相等,运算结果为布尔类型,不是true就是false。
2.+运算符操作数值, 字符, 字符串的区别是什么
3.&和&&的区别、|和||的区别
什么是短路现象呢?
右边表达式不执行,这种现象叫做短路现象。
什么时候使用&&,什么时候使用& ?
从效率方面来说,&&比&的效率高一些。因为逻辑与&不管第一个表达式结果是什么,第二个表达式一定会执行。以后的开发中,短路与&&和逻辑与还是需要同时并存的。大部分情况下都建议使用短路与&&只有当既需要左边表达式执行,又需要右边表达式执行的时候,才会选择逻辑与&。
总结
- 使用短路与 && 的时候,当左边的表达式为
false
的时候,右边的表达式不执行 - 使用短路或 || 的时候当左边的表达式结果是
true
的时候,右边的表达式不执行
注意:逻辑运算符两边要求都是布尔类型,并且最终的运算结果也是布尔类型。
4.&作为逻辑运算符和位运算符时的区别
&作为逻辑运算符时:
运算结果是布尔型,两边都是true,结果才是true
&作为位运算符时:
&按位与 当两位同时为1 则返回1
例如:
byte a = 3; //0000 0011
byte b = 5; //0000 0101
a & b 按位与 得到结果0000 0001 即是1
5. | 作为逻辑运算符和位运算符时的区别
| 作为逻辑运算符时:
运算结果是布尔型,两边都是true,结果才是true
| 作为位运算符时:
| 按位或 只要有一位是1 则返回1
例如:
byte a = 3; //0000 0011
byte b = 5; //0000 0101
a | b 按位或 得到结果 0000 0111 即是7
6.>>和>>>的区别
>>:有符号右移,正数最高位补0,负数最高位补1
8 >> 2 右移两位 相当于 8/4
高位 -- 低位
0000 1000
高位以0填充 低位舍弃2位
0000 0010
>>>:无符号右移,无论正数或负数,最高位都是补0
如何最快速计算 8*4 8<<2
如何最快速计算 8/4 8>>2
六.原码、反码、补码
计算机中存储的是补码
七.图解一些运算过程和结果
1. 图解3&5的运算过程和结果
结果为1
2. 图解3|5的运算过程和结果
结果为7
3.图解~5和~ -5 的运算过程和结果
计算机中存储的是补码
5:
正数原码、反码、补码是一样的
原码:0000 0101
反码:0000 0101
补码:0000 0101 --->按位取反 ~5 = 1111 1010 补码
1111 1001 反码
1000 0110 原码
~5 结果是 -6
-5:
原码:1000 0101
反码:1111 1010 反码=原码取反(除符号位)
补码:1111 1011 补码=反码+1 ---> ~ -5 = 0000 0100 补码
0000 0100 反码
0000 0100 原码
~ -5的结果是 4
4.图解3^5的运算过程和结果
5. 图解8<<2的运算过程和结果
结果为32
6.图解8>>2的运算过程和结果
结果为4
7.三目运算实例
一共有4个运算符
逻辑运算符 > 三目运算符 ?:
算数运算符++ 赋值运算符 =
运算顺序:
( 先 > 再 ?: 再 ++ 再 = )
先判断a>10 因为a=10所以不成立 所以通过?:选择 'B',字符'B'赋值给了b,a++后a的值变为11