在最底层,java中的数据是通过使用操作符来操作的
3.1更简单的打印语句
这篇简单介绍了下静态导入的概念
import static net.mindView.util.Print.*
import+static
3.12 使用java操作符
几乎所有的操作符都只能操作“基本类型” = == != 可以操作所有对象 String类支持 + +=
3.13 优先级
先乘除后加减 要经常使用 () 来表明优先级
String类型 + 非String类型 但编译器看到后 会强制将非String转化为String类型
3.14 赋值
= 表示 将右边的值,把他赋值给左边
对于基本数据类型 a = b 那么b的内容就复制给a了 如果修改a b 并不受影响
但是对于对象赋值来说 是将 b引用复制给 a a 与 b 同时指向 同一个堆内的对象 对a b 操作会相互影响
3.4.1 二进制算法
3.14.2 按位运算
1.^(亦或运算) ,针对二进制,相同的为0,不同的为1
2 ---> 0010
3 ----> 0011
结果--->0001 --->1
2.&(与运算) 针对二进制,只要有一个为0,就为0
2 ---> 0010
3 ----> 0011
结果--->0010 ----> 2
3.~(非运算) 针对二进制 一元运算符 0转1 1转0
2 ---> 0010
~
结果--->1101 具体多少位 要看 os 系统是多少位的 32 位 2 为 0000 0000 0000 0010
取反为 1111 1111 1111 1101
3.14.3 移位操作符 移位方向看箭头
1.<<(向左位移) 针对二进制,转换成二进制后向左移动n位,后面用0补齐
2 ---> 0010 2<<3 2向左移动三位(后面补三个0)
结果 ---> 0010000 --->2^4 = 16
2.>>(向右位移) 针对二进制,转换成二进制后向右移动3位
2 --->0010 2>>3 2向右一定3位
结果-->0000 结果为0
这里需要注意 >> 右移 是有符号移动 若为正数 需要在最高位补0 若为负数要在最高位补1
3.>>>(无符号右移) 移动方式和 >> 一致 但是属于无符右移,最高位不管正负都只在高位补0
注意:对 char byte short 进行移位处理 在移位进行前,他们就转化成int 类型了
并以int类型的值返回结果。只有数值的低5五位才有用。这样可以防止我们位移超过int类型的所有的位数
3.4.1 使用操作符时常犯的错
while(x=y){ // 除非 x 和 y 都是boolean 类型 否则不可能是正确的
}
3.15.1 类型转化操作符
窄转换:窄转换是指 我们将精度高(数据的位数较高)的基本类型转化为精准度低的基本类型 这样做会造成数据信息的丢失 所以java要求 进行强制转换(显示转换) int k = 5 ; short f = (short)k;//显示
扩展转换:扩展转换是指 我们将精度低(数据的位数较低)的基本类型转化为精度较高的基本类型 这样不会造成数据的丢失 所以可以使用隐式转换 int k = 5 ; long f = k; //隐士
java允许我们将任何基本类型转换成 别的基本数据类型 boolean 除外
3.15.2 截尾和舍入
folat double 转为 int 类型时 常常会产生 截尾问题 即 4.5 --》4 4.9---》4
这是可以使用 Math.round() 方法
Math.round(4.6)---》 5
3.15.3 提升
当低 精度数据类型 * 高精度数据类型 会自动转化为高精度数据类型
比如 5*0.1 = 0.5 int * float = float 类型
3.16 java没有sizeof
c c++ 中 通过 sizeof() 操作可以获得 数据项被分配了多少字节数
不同数据类型在不通机器上可能大小不一样 比如32 位的计算机 比 16位的能够保存更大的整数
所有移植对c c++程序猿颇为头疼
java不需要这些 因为 所以基本数据类型的大小是固定的
并不全 有些地方进行了省略