数据类型的转换
-
同种类型之间是可以直接进行赋值操作的
-
不同类型之间的赋值–>转换问题
-
同种大数据类型之间才能发生转换
- 基本类型之间转换(自动 强制)
- 引用数据类型之间的转换(自动(上转型) 强制(下转型))
- 基本类型和引用类型之间不可以直接进行转换(间接 包装类)
-
保证大数据类型一致前提下
-
基本类型与基本类型
-
小数据类型相同
前提:都是整型 或 都是浮点型
大空间变量可以之间存储小空间
小空间不可以直接存储大空间(需要进行强制类型转换,可能会有损失)
-
小数据类型不同
整型与浮点型:比较的是精度
任何一个浮点型都可以存放整型,反之,需要强制类型转换
-
整型与字符型
一个int类型可以存放字符型,反之,需要强制类型转换
-
布尔类型不能与其他类型进行转换
-
-
运算符
-
按照运算符的功能分类
-
算术运算符
+ - * / % ++(自增) --(自减)
x++ 与 x = x+1的区别:
++ :会临时产生一个备份
++在变量前,先自增再备份;
++在变量后,先备份后自增。
将备份进行赋值,之后备份销毁
x = x + 1:将x变量空间内容取出,常量取出1,进行计算,再次存回x空间
例如:
Int a = 1;
a = a++;
// a 永远为 1 ,因为备份永远为1
-
赋值运算符
普通赋值:=
混合赋值:+= -= *= /= %=
Int x = 1;
x+=2;// 3
x = x+2;//3
byte ,short ,char 三者任何两者或两者以上都首先会进行 自动类型提升(提升为int 类型,结果也为int类型)
Byte x = 1;//自动类型转换
x += 2//自动类型转换 也就是说 = 等价于 +=(-= ,*= ,/=, %=)都会进行自动类型转换
x = (byte)(x + 2)// 编译时异常
-
关系运算符
> >= < <= != == (对象 instanceof 类)
区分 = 和 == 区别:
= 赋值符号
== 比较前后的内容(值或引用)
-
逻辑运算符
&逻辑与 |逻辑或 ^逻辑异或 !逻辑非
&&短路与 ||短路或
-
^ 逻辑异或 :前后boolean值相同为假,不同为真
性能的优化:
&&短路与:当第一个条件为false时,就为false
||短路或:但第一个条件为true时,就为true
-
-
位(bit)运算符
&按位与 |按位或 ^按位异或 ~按位取反(这一行知道即可)
<<按位左位移 >>按位右位移 >>>按位右位移(无符号)
-
3&5 运算步骤
First:把 3 和 5 转为二进制
Second:竖着按照对应位置排列进行&(| ^)计算
Third:将计算结果转换为十进制返回
-
~6 = -7 0对应-1 1对应-2
补充:原码 反码 补码
例如: 6
原码:00000000 00000000 00000000 00000110
反码:00000000 00000000 00000000 00000110
补码:00000000 00000000 00000000 00000110
-6
原码:10000000 00000000 00000000 00000110
反码:11111111 11111111 11111111 11111001 符号不动 按位取反
补码:11111111 11111111 11111111 11110101 反码加1
*计算机不管是正数还是负数,都以补码进行存储
注:反码是一种表示形式 取反是一个计算过程
-
.按位位移
6<<2 = ?
00000000 00000000 00000000 00000110
00000000 00000000 00000000 00011000
答案:24 总结:相当于乘以2的位移次幂
6>>1 = ?
00000000 00000000 00000000 00000110
00000000 00000000 00000000 00000011
答案:3 总结:相当于除以2的位移次幂
-6 >>1 =?
11111111 11111111 11111111 11110101
?1111111 11111111 11111111 11111010
如果是 >> :保留符号位置 ? = 1 所以答案:-3
如果是>>>:不保留符号位置 ? = 0,所以答案不是人算的
-
-
-
按照运算符操作项目的分类
-
一元运算符
复合运算符(+= ,-= ,*= ,/=)
自增(++) 与 自减(–)
取反(!)
-
二元运算符
算术运算符
逻辑运算符(除了!)
比较运算符
位运算符
-
三元运算符
格式: 数据类型 变量名 = x > y ? 表达式1: 表达式2
-
方法(先简单学习格式,后续详解)
-
方法的定义
public static 返回值类型 方法名(参数列表){
方法体
}
-
方法的调用
方法名()
*** 在方法的内部不能嵌套定义,可以嵌套调用**