java基本数据类型根据字节占用顺序包括boolean,byte,char,short,int,float,long,double
计算机中一个字节代表8位。根据各个类型所占用字节数可以得到表示的范围为 -2^位数 —— 2^位数-1次幂 - 1
除char与boolean外,其余类型的封装类继承于Number类 。java.lang -> java.lang.Number -> java.lang.XXX
除char的封装类外,其余封装类可以通过传递字符串来进行实例。boolean类型传入字符串如果为非true,则全部为false。
并且在通过传入字符串进行实例化时,如果无法被封装类所解析则会抛出NumberFormatException异常,
在实际使用浮点数时,为了数据更加精确,一般使用BigDecimal类型。
类型的转换:
(1).parseXXX() 返回值为基本数据类型
(2).valueOf() 返回值为封装数据类型
(3)强制转换 一般不建议使用
String a = "123";
System.out.println(Integer.parseInt(a)); int 123
System.out.println(Integer.valueOf(a)); Integer 123
System.out.println((long) 1.5); long 1
在进行类型转换时,低位数可以转为高位,但是不可以将位数高的转为低的。
例如:Interger.ValueOf( Long )是不允许的。因为所表示数值的范围不同。但是可以进行Long.ValueOf( Integer),
比较大小的方法:
每个基本类型都对应一个封装类,区别在于,基本类型存储在栈中,而封装类型为一个对象,存储在堆中。
基本类型的比较可以通过 == 进行比较,而封装类型的比较则需要通过其他方法。
==方法比较的是两个值的内存地址,而当创建了两个封装类型对象时,两个对象值相同而地址不同,所以返回false;
(1).equals()方法,其实底层都是通过基本的方式进行比较,Integer用IntValue(),Double用doubleToLongBits(),注意要同类型之间比较
(2)compareTo()方法,返回值前值大于后值返回1,小于返回-1,相等返回0
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a == b); false
System.out.println(a.equals(b)); true
System.out.println(a.compareTo(b)); 0
不常用方法:
/**
* java基本数据类型以及封装类所包含的方法.
* <p>
* Created by yukaiji on 2017/2/26.
*/
public class BasicType {
/**
* 基本数据类型的字节数.
*/
public static void sysoutSize() {
System.out.println("Byte:" + Byte.SIZE / 8); // 2^7-1
System.out.println("Character:" + Character.SIZE / 8);
System.out.println("short:" + Short.SIZE / 8); // 2^15-1
System.out.println("Integer:" + Integer.SIZE / 8); // 2^31-1
System.out.println("float:" + Float.SIZE / 8);
System.out.println("Long:" + Long.SIZE / 8); // 2^63-1
System.out.println("Double:" + Double.SIZE / 8);
System.out.println("Boolean:" + Boolean.FALSE);
}
public static void lang() {
// 除boolean和char其余基本类型的封装类继承于Number类
// java.lang -> java.lang.Number -> java.lang.XXX
// 除Character类外,其他包装类可将一个字符串作为参数构造它们的实例
// boolean类型传入字符串为非true,全部为false。
// 传入的字符串必须能够被引用类型解析,否则会报NumberFormatException
// Long型转Int型如果数据过大,溢出从负数开始往回减
Integer integer = new Integer("123");
Boolean boo = new Boolean("true");
Long aLong = 1L;
System.out.println(integer);
System.out.println(boo);
}
public static void equles() {
// Character类型不能直接new一个ASCII码值。
// 基本类型的封装类,hascode是该值在机器中的ASCII码值。具有唯一性
// bitCount 用于返回二进制有多少个1
// getInteger(java.lang.String) 返回系统属性为String的Integer值
// highestOneBit( i ) 讲i最高位保留,其余位数补0
// lowestOneBit( i ) 讲i最低位保留,其余位数补0
// numberOfLeadingZeros( i ) 二进制最高为1的位左侧为零的数量
// numberOfTrailingZeros( i ) 二进制最低为1的位右侧为零的数量
// reverseBytes - reverse 暂时不懂,暂时认为是反码
// lowestOneBit 用于判断数值正负,1 和 -1 来表示
// rotateRight 用于判断数值正负,1 和 -1 来表示
// rotateLeft 和 rotateRight 代表循环左移和右移 << >>
// toBinaryString 、toHexString、toOctalString 将十进制数转换为 2 、16 、8 进制
Character car = new Character('a');
Integer in = new Integer(7);
Integer in1 = new Integer(4);
System.out.println(Integer.bitCount(7));
System.out.println(Integer.highestOneBit(7));
System.out.println(Integer.lowestOneBit(7));
System.out.println(Integer.toBinaryString(7));
}
public static void calculation() {
// >> 为有符号右移,起始位为0代表正数,右移位数直接舍弃,为1代表负数,右移位置补到最左侧
// >>> 为无符号右移,无论正负,高位用0补位
System.out.println(2 << 3); // 2的二进制为10 左移三位为 10 000 为16
System.out.println(16 >> 3); // 16的二进制为10000 右移三位 10 为2
}
}