一、基本数据类型
1、整数型:
1.1 byte---字节型---占1个字节 --- 表示范围是 --- -128~127
例:byte b = 25; byte b2 = 128;---false(超出范围)
1.2 short---短整型---占2个字节 --- 表示范围是 --- -32768~32767
例:short s = 3; short s = -109;---几乎不用
1.3 int---整型---占4个字节--- 表示范围是 ---
---整数默认为 int类型
例:System.out.println(6); int i = 129;
从JDK1.7开始int j = 3_186_485_318; ->编译 完成之后就是int j = 3186485318;
1.4 long---长整型---占8个字节---表示范围 ---
---后边添加L/l标志是一个长整型
例:long l = 31864853188L;
2、浮点型:
2.1 float---单精度---占4个字节 ---表示范围 ---要求必须以F/f标志float类型的数字。
例: float f = 3.23f;
2.2 double---双精度---占8个字节--- 表示范围 ---小数默认为double
例:System.out.println(3.4); double d = 4.2; double d2 = 5.6D; double d3 = 6.01d;
3、字符型:
3.1 char---字符型---占2个字节--- --- 0~65535
例:char a= ’a’; char b=’中’;(对于中文而言,采用gbk编码,一个汉字占两个字节,用 utf-8,占用三个字节。)
转义字符:
‘\t’ ---table 制表符
‘\r’---return 回车
‘\n’---next/newLine换行
‘\\’ ---\
‘\’’ --- 单引号
‘\”’ --- 双引号
4、布尔类型:
4.1 boolean ---布尔型---只能表示true/false---内存大小根据jdk版本和操作系统来确定
例:boolean b = true;
二、基本数据类型转换:
1、自动类型转换/隐式转换:
规律一:小的类型可以自动转化为大的类型
byte--->short--->int--->long
float--->double
规律二:整数能够自动转化为小数,但是会产生精度损失
规律三:字符可以转化成整数
2、强制类型转换:
double d=3; int a =(int)d;
Int a=5;byte b= (int)a;
注意,小数类型转化为整数的时候,小数部分会舍掉。
三、包装类(Package class)
1、定义
给每种基本类型提供一个对应的类形式这些类我们称之为包装类
Byte | short | int | long | float | double | char | boolean |
Byte | Short | Integer | Long | Float | Double | Character | Boolean |
int和char对应的包装类发生变化。
数值类的顶级父类是Number class。
2、特点
2.1. 包装类底层对toString()方法做过重写,直接打印出数值。
2.2. 包装类底层将字符串转化为一个字符数组,首先判断数组的首位是否是+、-,再依次判断每一位是否是一个数字字符。
3、自动封箱
将一个基本类型的变量转化为了对应的引用类型对象的过程叫封箱,也叫装箱。
将一个基本类型的变量来直接赋值给对应的引用类型对象的过程叫自动封箱,也叫自动装箱。自动封箱实际上是调用了对应类的valueOf方法。
由于自动封箱的问题,所以值在-128到127之间的时候会进行判断,如果值在-128到127之间,会直接指向常量池。如果不在这个范围内,会在底层new integer(value)实际上指向了堆内存。
4、自动拆箱
将一个引用类型的对象来直接赋值给对应的基本类型变量的过程叫自动拆箱。实际上是调用了对应对象的***Value方法。
Integer in = new Integer(120);
自动封箱/拆箱是JDK1.5的特性之一。
如果是基本类型和引用类型进行运算,引用类型会进行自动拆箱。
5、构造函数
5.1. Package(package p);
Byte(byte value);
Short(short value);
Integer(int value);
Long(long value);
Double(double value);
Float(double value);
Float(float balue);
Character(char value);
Boolean(boolean value);
如果字符串不是“true”那么结果就是false。
5.2. Package(String s);
Byte(String s);
Short(String s);
Integer(String s);
Long(String s);
Double(String s);
Float(String s);
Boolean(String s);
将一个字符串转化为一个包装类。底层调用的是pares***方法。
包装类底层将字符串转化为一个字符数组,首先判断数组的首位是否是+、-,再依次判断每一位是否是一个数字字符。
Character没有提供字符串转化,所以可以用下面的方法转化:
“a” -> ‘a’ “a”.charAt(0) -> ‘a’ “a”.toCharArray()[0]
底层过程
- 调用来parse***方法。
- 获取这个字符串的第一个字符,判断是否是+/-。
- 遍历这个字符串的每一位,依次判断每一位是否是一个数字字符。
- 如果不是数字字符,则报错:NumberFormatException。
6、重要方法
6.1. parse基本数据类型(String s);
parseByte(String s);
parseShort(String s);
parseInt(String s);
parseLing(String s);
parseFloat(String s);
parseDouble(String s)
parseBoolean(String s);
将一个字符串转化为一个包装类。
6.2. hashCode();
Integer类型的哈希码是其实际值。包括baty,short,int。
Long类型的哈希码是其实际值(int)((value)^(value>>>32))。
Double 类型的哈希码也是固定的。
小数的哈希码需要经过计算;
字符的哈希码是其对应的编码;
布尔类型的哈希码是返回一个特殊值---true:1231 false:1237
包装类对象的哈希码都是固定的。
八种基本类型的哈希码都是固定值。