Java8种基础类型
整型包括: int、short、long、byte
其中[int] 占位 4个字节,一个字节 = 8位,则在java虚拟机中共占用32位,则取值范围为 -2的31次方~2的31次方 - 1。
short占位2个字节,取值范围为 ±2的15次方;long占8个字节,取值范围:±2的63次方。正数范围内需-1
短整型short与byte适用于底层文件处理,或存储很宝贵的大数组使用。
浮点型包括:float、double
浮点型[float]占用4个字节,32位的占用中可细分为:1bit的符号位、指数位8bit,剩余的尾数位为:23bit。最高为 1负0正。特别注意是的,当 1/0时表示无穷大,0/1时表示NaN。这需要在计算数值时候做出适当判断,以免产生NaN等。
双精度(Double)占用字节为8,它比float数值精准度为2倍。所以一般情况下,选择double类型作为小数运算。
字符类型:char
在java中,char可表示成 ‘A’编码值为65的字符常量,而”A”则表示成一个字符串。在过往的时间里,出现过许多编码形式,如:ISO8859-1、ASCII等编码形式,而如今常用的则为UniCode,如utf8等。
布尔类型: boolean
java中数值的1与0不能表达真假状态,如:
1 |
|
此语句下若x=0,可正常进入,java不会把x最终的结果0看做成布尔类型。
大数
大数是用于复杂类型的计算,相比较于数值的进行,不论是整型、双精度都有一个精度范围,而在某一些的场景下需要运行大数,如1225245343233356666664330000000084865834828345863这里的数值。本身的数值超出了所有类型的范围,则就需要把数值转化成字符型。
字符型的优势在于,不论你的数值有多大,其实际表达的意思为占用空间的大小,所以理论上大数是没有限制的。在java中提供了两种常用的大数计算类:BigDecimal、BigInteger。
BigDecimal:此类可以提供相对应的不同的浮点数运算。常用的方法有:add、subtract、multiply、divide(除)。divide有两种方式入参,其方法表示形式为:
1 | BigDecimal divide(Bigdecimal other); |
其RoundingMode中的RoundingMode.HALF_UP方法可以自动进行进位,其BigDecimal提供的setScale()方法提供对大数的保留小数位数,入参数方式
1 | BigDecimal bigNumber = new BigDecimal("100000.3453453453") |
静态变量(static)与final
final修饰符主要用于表示修饰一个变量不可改变,如: name变量被修饰 final name = “jianfreespace”后。则该初始化后续不可被重新赋值。
static静态字段用于修饰在成员方式或者变量上,若修饰在成员变量中,则在一个类中,作为一个静态变量存在,不论任意对象进行实例化,所有类的实例会共享同一个静态字段。静态字段是属于类,不属于任意对象。
一般情况下,静态变量使用的不多,因为会造成混乱与不变,但静态常量确常常出现,用于 public static final进行修饰。
instanceof
instanceof用于判断是否元素或对象属于这个类型或是其父类。在类型转化时可以使用其判断
1 | if (object instanceof object) { |
equals
equals方式用于比较值或对象,值得注意的是,若两个对象 A与B,若A.equals(B)为真,则相对应的hashcode一定相等,若重写了equals方法则必须重写hashcode方法,因为若不重写hashcode方法,其默认取Object中对象存储地址得出散列码。
概念:两个相等的对象一定有相同的hashcode。
toString
toString方法默认由Object方法。返回一个对象值的字符串。一般来说,自定义子类时需要重写toString方法可以更直观的表现数据的呈现形式与方法。
1 | public class People |
自动装箱与自动拆箱
自动装箱=>将基础类型转化为包装类型。会默认自行转化,如存入数组为Integer时,你写入list.add(3)等同于=>list.add(Integer.valueOf(3));
自动拆箱=>将包装类型转化成基础类型。会默认自行转化,获取数组的值时,int item = list.get(i) => int item = list.get(i).intValue();
1 | ArrayList<Integer> list = new ArrayList<>; |
包装类型的比较一般情况下不能使用 ==,因为 == 运算符检测的是对象是否具有相同的存储位置。不过通常下不同对象的存储地址都是不同的。若需要判断两个包装类型的值是否相同,则需要使用equals来判断。
1 | public static void main(String[] args) { |
枚举类
枚举类是特殊类型,它一般用来表示一组常量,如月份、星期、四季等。枚举类的基本用法:
1 |
|
Java反射类
java反射虽然在业务场景下使用较少,但在框架与开发基础性工具上常常用到。反射可以用来:在运行时分析类的能力、在运行时检查对象等。Class类保存基本类的一些信息,比如例子中,People.class是类取class,people.class取类对象,其本质的结果class都是一样的。
1 | public static void main(String[] args) { |
反射类中还可以使用Class.forName()用来获取一个类对象。并可以构建初始化对象。如:
1 | People p = (People)Class.forName(Perple.class) |