JAVA的基本数据类型与其包装类
任何一个编程语言的数据类型都是重要的细节,很多代码往往可能由于数据类型不一致而报错
基本数据类型
整数型:byte,short,int,long
浮点型:float,double
字符型:char
布尔型:boolean
整数型
整数型用来存储整数数值,没有小数部分的数值,如十进制,八进制,十六进制数
注意:
- 除了数字0,不能以0作为其他十进制的开头
- 八进制,如0123(转换为十进制为83),八进制必须以0开头
- 十六进制,必须以0x开头
整数型数据类型取值范围:
数据类型 | 内存空间 | 取值范围 |
---|---|---|
byte | 8位 | -128~127 |
short | 16位 | -32768~32767 |
int | 32位 | -2147483648~2147483647 |
long | 64位 | -9223372036854775808~9223372036854775807 |
浮点型
浮点型表示有小数的部分,java语言中浮点分为单精度浮点(float)和双精度浮点(double)
在默认的情况下,小数都被认为是双精度浮点类型,若使用float类型,则需要在小数后面添加F或者f
浮点型数据类型取值范围:
数据类型 | 内存空间 | 取值范围 |
---|---|---|
float | 32位 | 1.4E-45~3.4028235E38 |
double | 64位 | 4.9E-324~1.7976931348623157E308 |
举例
float f1 = 13.23f;
double f2 = 4565.12d
double f3 = 456445.1245
字符类型
char 用于存储单个字符,占用16位(两个字节)的内存空间,定义字符类型时,需要用单引号表示,如‘s’表示一个字符,但是“s”则表示一个字符串
使用char关键字可以定义一个字符变量
例如:
char x = 'a';
// 由于a在unicode表中的排序为97,因此也可以写为
char x = 97;
转义字符
转义字符是一种特殊的字符变量,它使用“\”开头,转义字符具有特定的含义,不同于字符原有的意义
部分转义字符
转义字符 | 含义 |
---|---|
\t | 垂直制表符,将光标转移到下一份制表符的位置 |
\r | 回车 |
布尔类型
布尔类型又称为逻辑类型,只有true和false两种
分别代表逻辑中的真和假,布尔值不能和整数类型进行转换,一般用作判断条件
数据类型转换
类型转换是将一个值的类型转换为另外一种类型的过程,例如可以将string类型的“123”转换为整数型的123
注意:
如果从低精度转向高精度,则不会有数据的益处,如果从高精度转向数据的低精度,则会有信息的丢失,有可能会有失败
隐式转换
由低精度向高精度的转换,系统将自动执行,这些类型按照精度从低到高的排列为
byte<short<int<long<float<double
举例
int x = 50;
float y = x;
显式转换
将高精度转换为低精度时,必须使用显式类型转换运算(又称为强制类型转换)
语法如下:
(类型名)要转换的值
举例:
int a = (int)10.12; // 输出为10
long y = (long)40.6f // 输出为40
包装类
java是一种面向对象的语言,java中的类把方法和数据连接在了一起,构成了一种数据类型的处理单元,为了能够将基本类型视作对象进行处理,并能连接相关的方法,java为每一个基本类型都提供了包装类,如int的包装类Integer,这样就可以把基本类型转换为对象进行处理。
java.long包中的Integer类、Long类可以将基本类型int,long封装为一个类,由于类包含的方法基本相同,我们直接介绍其中的Integer
Integer类在对象中包装了一个基本类型int的值,并且提供了很多的方法,能够在int和string之间进行转换
构造方法:
区别:
- 原理
int 是基本类型,直接存数值
Integer是类,产生对象时用一个引用这个对象 - 位置
在函数中定义的一些基本类型的变量都是在函数的栈内存中分配
而对象是在存储堆内存中
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配
举例:
Integer a = 0;
Integer b = 0;
System.out.println(a == b);
// true
当我们判断两个Integer类时,会调用valueOf()方法
返回一个 Integer实例表示指定的 int值。此方法在范围内的缓存值为- 128至127包含,并可能缓存在此范围以外的其他值。
int a = 0;
Integer b = 0;
System.out.println(a == b); // true
当比较基本类型和包装类的时候,包装类会进行自动拆箱,此时就类似与int类型的两个值进行比较
static Integer c;
public static void main(String[] args) {
int d = c;
} // NullPointerException
当直接定义一个对象(Integer)时,此时并没有对其进行赋值,所以对象并没有任何的指向,而这个时候如果和基本数据类型进行相关操作,包装类会进行自动拆箱,而此时包装类i指向Null,这时,会报出空指针异常的警告,当改为
static Integer c = 1;
public static void main(String[] args) {
int d = c;
}
则不会有相关的问题出现。