基本数据类型

整数类型变量

整数类型变量用来存储整数数值,即没有小数部分的值。在Java中,为了给不同大小范围内的整数合理地分配存储空间,整数类型分为4种不同的类型:字节型(byte)、短整型(short)、整型(int)和长整型(long),4种类型所占存储空间的大小以及取值范围如表所示。列出了4种整数类型变量所占的空间大小和取值范围。其中,占用空间指的是不同类型的变量分别占用的内存大小,如一个int类型的变量会占用4个字节大小的内存空间。取值范围是变量存储的值不能超出的范围,如一个byte类型的变量存储的值必须是-27~27-1的数

类型名

占用空间

取值范围

byte

8位(1字节)

-27~27-1

short

8位(1字节)

-215~215-1

int

32位(4字节)

-231~231-1

long

64位(8字节)

-263~263-1

在为一个long类型的变量赋值时需要注意点.所赋值的后面要加 上一个字母L或(小写l).说明赋值为long类型。如果赋的值未超出int型的取值范围,则可以省略字母L.(或小写l)。具体示例如下:

long num 200000000L//所赋的值超出了int型的取值范围,后面必须加上字母L
long num -198L://所赋的值未超出int型的取值范围,后面可以加上字母L 
long num -198;//所赋的值木超出 int型的取值范围,后面可以省略字号L

浮点数类型变量

浮点数类型变量用来存储小数数值。在Java中,浮点数类型分为两种:单精度浮点数(float)和双精度浮点数(double), double 型所表示的浮点数比float型更精确,两种浮点数所占存储空间的大小以及取值范围如所示。

类型名

占用空间

取值范围

float

32位(4字节)

1.4x10-45 ~3.4x10+38,-1.4x10-45 ~-3.4x10+38

double

64位(8字节)

4.9x10-324 ~1.7x10+308,-4.9x10-324 ~-1.7x10+308

在Java中,一个小数会被默认为double类型的值,因此在为一个float类型的变量赋值时,所赋值的后面一定要加上字母F(或者小写f),而为double类型的变量赋值时,可以在所赋值的后面加上字符D(或小写d),也可以不加。具体示例如下:

float f=-123.4f//为一个float类型的变量赋值,后面必须加上字母f或F
double dI -199.3d;//为一个double类型的变量赋值,后面可以加上字母d或D
double d2 -100.1;//为一个double类型的变量献值,后面可以省略字母d成D

在程序中也可以为一个浮点数类型变量赋予一个整数数值,例如下面的写法是可以的。

float t=-100;//声明一个float类型的变量并赋值数值
double d=100;//声明一 个 doubie类型的变量 并赋整数值

字符类型变量

字符类型变量用于存储一个单一字符,在Java中用char表示。Java 中每个char类型的字符变量都会占用2个字节。在给char类型的变量赋值时,需要用一对英文半角格式的单引号把字符括起来,如’e’,也可以将char类型的变量赋值为0~65535范围内的整数,计算机会自动将这些整数转化为所对应的字符,如数值97对应的字符为’a’。下面的两行代码可以实现同样的效果。

char C='a';//为一个char类型的变量赋值字符'a'
char ch=97;//为一个char类型的变量赋值整数97,相当于赋值字符'a'

布尔类型变量

布尔类型变量用来存储布尔值,在Java中用boolean 表示,该类型的变量只有两个值,即true和false. 具体示例如下:

boolean flag false;//声明一个boolean类型的变量,初始值为false
flag =true;//改变flag变量的值为true

变量的类型转换

在程序中,当把一种数据类 型的值赋给另一种数据类 型的变量时,需要进行数据类型转换。根据转换方式的不同,数据类型转换可分为两种:自动类型转换和强制类型转换。

自动类型转换

自动类型转换也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。当把一个类型取值范围小的数值直接赋给另一个取值范围大的数据类型变量时,系统就会进行自动类型转换,否则需要进行强制类型转换。Java中的自动类型转换就好比将小瓶中的水倒人到大瓶的换装过程。我们将小瓶水倒人到大瓶中时,由于小瓶的容量比大瓶的容量小,所以倒人的水永远不可能溢出大瓶。同样,在Java中,将取值范围小的数据类型的变量值赋值给取值范围大的数据类型的变量时,程序也不会出现任何问题。
Java中支持的不同数据类型之间的自动转换如所示。








byte

short

int

char

long

float

double


从图可以看出.Java中取值范围小的byte short char等类型数据都可以自动转换为取值范围大的数据类型(如int类型),并最终都可以自动转换为双精度浮点数类型。

byte b=3;
int x =b;//程序把byte类型的变量b转换成了int 类型,无须特殊声明
double y=x; //将 int类型的变量x转换成double类型,无须特殊声明

上面的语句中,首先将byte类型的变量b的值赋给了int 类型的变量x,然后将int类型的变量x赋值给了double类型的y。由于int(double)类型的取值范围大于byte(int)类型的取值范围,编译器在赋值过程中不会造成数据丢失,所以编译器能够自动完成这种转换,在编译时不报告任何错误。

强制类型转换

强制类型转换也叫显式类型转换,指的是两种数据类型之间的转换需要显式地声明。当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,自动类型转换无法进行,这时就需要进行强制类型转换。 Java中的强制类型转换就好比将大瓶中的水倒入到小瓶中一样,如果大瓶中的水的容量小于小瓶的容量.那么水是可以完全倒人的;如果大瓶水过多,其容量超过了小瓶的容量,那么多出来的水就会溢出,从而造成损失。同理,将取值范围大的数据类型的变量值赋值给取值范围小的数据类型的变量时,就可能造成数据的丢失,所以系统默认不支持这种行为,只能由开发者自己决定是否进行强制类型换。

double b=3;
int x =(int)b;//程序把double类型的变量b转换成了int 类型,须特殊声明
byte y=(byte)x; //将int类型的变量x转换成byte类型,须特殊声明

上面的语句中,首先将double类型的变量b的值赋给了int 类型的变量x,然后将int类型的变量x赋值给了byte类型的y。由于byte(int)类型的取值范围小于于int(double)类型的取值范围,编译器在赋值过程中可能会会造成数据丢失,所以编译器不能自动完成这种转换,在编译时会报错。