一些运算符
<<n 左移 二进制数向左移动n位,右边用0补齐n位,相当于 原值*2^n
>>n 有符号右移 二进制数向右移动n位,保留符号位,左边其余n-1用0补齐,相当于 原值/2^n
>>>n 无符号右移 二进制数向右移动n位,左边用0补齐n位
| 按位或 0|0=0,0|1=1,1|0=1,1|1=1
& 按位与 0&0=0,0&1=0,1&0=0,1&1=1
^ 按位异或 0^0=0,0^1=1,1^0=1,1^1=0
~ 取反 对二进制位取反 ~0=1,~1=0
int型的存储方式
java无无符号类型
计算机以补码形式存储数值
原因:
1.原码中1000 0000和0000 0000都表示0,所以在补码中人为规定1000 0000表示-2^7(-128)
2.计算机CPU只有加法器,对于正负数相加会出现问题。
如:1+(-1)=0 以原码形式存储 0001+(1001)=1010 为-2
若以补码形式存储 0001+(1111)=0000 为0
原码 最高位为符号位,1表示负数,0表示正数
如 +1=0000 0001 -1=1000 0001
反码 (以8位举例:正数+负数=1111 1111)
正数的反码即原码本身
负数的反码为最高位符号位不变,其余位取反
如 +1=0000 0001 -1=1111 1110
补码
正数的补码即原码本身
负数的补码为最高位符号位不变,其余位取反,后加1
如 +1=0000 0001 -1=1111 1111
泛型
引入缘由:使集合能记住集合元素各类型,且能够达到编译时不出现问题,运行时就不会出现java.lang.ClassCastException异常
参数化类型 将类型由原来的具体的类型参数化,类似于方法中的变量参数,将类型也定义参数形式,后在使用时传入具体的类型
自定义泛型接口、泛型类、泛型方法
类名<T> T、E、K、V等形式参数都常用于表示泛型形参
类中方法或变量要使用该类型,在定义时即由T等形式参数指明
如:
但泛型在逻辑上是多个不同的类型,实际上是相同的基本类型
具体只作用于代码编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型的相关内容擦除,所以泛型信息不会进行到运行时阶段
类型通配符 为泛型类提供一个父类的引用
一般使用?代替类型实参
类名<?> 逻辑上是 类名<具体类型实参> 的父类
为对类型通配符有更进一步的限制提出
类型通配符上限 类名<? extends 类型> 声明为exends后类型及其子类
类型通配符下限 类名<? super 类型> 声明为super后类型及其父类