8 种类型表示范围如下:
byte:8位,最大存储数据量是256,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,赋值时可以加上f或F也可以不加。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
float f1=12;//可加 可不加
Float f2=12F;//必须加
Float f3=12f;//必须加
long l1=12;//可加 可不加
Long l2=12L;//必须加
Long l3=12l;//必须加
类型 | 二进制位数 | 默认值 | 对应的封装类 |
byte | 8 | 0 | Byte |
short | 2*8 | 0 | Short |
int | 4*8 | 0 | Integer |
long | 8*8 | 0 | Long |
float | 4*8 | 0.0 | Float |
double | 8*8 | 0.0 | Double |
char | 2*8 | 空格 | Character |
boolean | 无 | false | Boolean |
整型
byte的取值范围为-128~127(-2的7次方到2的7次方-1)
short的取值范围为-32768~32767(-2的15次方到2的15次方-1)
int的取值范围为(-2147483648~2147483647)(-2的31次方到2的31次方-1)
long的取值范围为(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1)
浮点型
学过计算机原理的应该都知道,这两个类型的区别在于精度不同,double比float精度更高,范围更大。
单精度:float 3.402823e+38 ~ 1.401298e-45
(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)
双精度:double 1.797693e+308~ 4.9000000e-324
字符型
char是按照字符存储的,在代码中用引号,不管英文还是中文,固定占用占用2个字节,用来储存Unicode字符。范围在0-65536。例如:
char s=‘码’;1
char可以存储中文,那个问题来了:
为什么char型的可以存储utf-8的字符呢?
首先,GBK的汉字是两个字节的,而utf-8是三个字节的。在java的内部存储中,都是以unicode为主,一个汉字转化为unicode是两个字节,当汉字进行存储后,java会把汉字转化成unicode编码,这样子就可以存储进去了。而utf-8,GBK只不是过外在软件的编码格式,并不是内部存储的格式。
其实在存储汉字的时候,utf-16的效果要比utf-8优秀,因为utf-16只需要2byte的大小就行。
布尔型变量
布尔型变量还有true和false两种,在C语言中可以用1表示true,0表示false,但是在java中是不允许的。
String
很多人会把String当成是java的基本来类型之一,其实并不是。String是一个应用数据类型,是java中的一个类。String类型的参数用双引号表示。例如:
String s="12345";
强制类型转化
自动类型转化:
byte–>short–>int–>long–>float–>double
例如:
int a = 5;long b=a;//这是成立的,反过来byte b=a;就不成立了,需要强制类型转化12
强制类型转化:
例如:
int a = 8;byte b=(byte)a;//强制类型转化是在参数前用括号加上数据类型进行转化12。但是这种方法并不是全 部情况都使用,需要看情况而定,因为这样子
1、会损失精度 。
2、容易超出取值范围出错。
java引用类型
java有5种引用类型,分别是类,接口,数组,枚举,注解,这里不过多介绍
封装类
java的八大数据类型都有对应的封装类。
在实际编程中,基本使用的是基本数据类型来存储数据,这主要是因为如果用封装类,对于程序的开销就会变大,而这在实际中是完全没有必要的。
那为什么还要设置类呢?因为在java中,泛型类包含了预定义的集合,在这里使用的是对象类型,无法直接使用基本数据类型,所以定义了封装类,提供这些基本数据类型的包装容器。而且封装类中提供了有用的方法,可以对进行数据的操作。这里不做过多介绍
拆箱装箱(Autoboxing and unboxing)
举例:
Integer a = 100; //这是自动装箱(编译器调用的是valueOf(int i))
int b = new Integer(100);// 这是自动拆箱