亲宝软件园·资讯

展开

Java基本数据类型

码农洞见 人气:0

1 前言

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。

因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
 
Java支持八种基本数据类型,包括一种布尔类型、一种字符类型、一种数值型,包括四种整数类型和两种浮点数类型。

2 布尔类型

boolean b = true2

3 字符类型

  char c = 'A';

4 值类型

4.1 byte

  byte b = 100;

4.2 short

  short short s = -10000;

4.3 int

  int a = 100000;

4.4 long

 long l = 100000L;

"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

4.5 float

  float f1 = 234.5f;

4.6 double

  double d5 = 12.9867; 

5 码农来洞见

5.1 类型转换

Java允许整数和浮点数之间互相转换。并且,由于每个字符都对应Unicode编码中的一个数字,所以char与整数和浮点数之间也可以相互转换。事实上,在Java中,boolean类型是唯一一种不能跟其他基本类型相互转换的基本类型。

自动类型转换:

也叫隐式类型转换,其实就是小范围的数据类型向大范围的数据类型转换(byte ->short(char)->int->long->float->double)

强制类型转换:

也叫显式类型转换,是从存储范围大的类型到存储范围小的类型(double→float→long→int→short(char)→byte)。强制类型转换所带来的结果是可能会丢失精度,如果此数值尚在范围较小的类型数值范围内,对于整型变量精度不变,但如果超出范围较小的类型数值范围内,很可能出现一些意外情况。

int i = 223;
byte b = (byte) i;

上面的例子中输出值是-23.

为什么结果是-23?需要从最根本的二进制存储考虑。

233的二进制表示为:24位0 + 11101001,byte型只有8位,于是从高位开始舍弃,截断后剩下:11101001,由于二进制最高位1表示负数,0表示正数,其相应的负数为-23。

数据类型自动提升:

数值类型在内存中直接存储其本身的值,对于不同的数值类型,内存中会分配相应的大小去存储。如:byte类型的变量占用8位,int类型变量占用32位等。相应的,不同的数值类型会有与其存储空间相匹配的取值范围。

在Java中,整数类型(byte/short/int/long)中,对于未声明数据类型的整型,其默认类型为int型。在浮点类型(float/double)中,对于未声明数据类型的浮点型,默认为double型。

5.2 存储空间

注意事项1:

如果需要一个占位符来存储数字1000000,那么需要一个int型数,long可以用于存储更大的数字,读者可能问,既然long可以包含比byte和int型数更大的数字,为什么不总是使用long呢?这是因为long需要64位,相比byte
或int,这会占用更多的内存空间。因此,为了节省空间,需要选择合适的基本类型。

注意事项2:

将一个int型的1000赋给一个byte型的变量a,提示出错,但是最后一句:将一个int型的3赋给一个byte型的变量c,居然编译正确,这是为什么呢?

byte b1 = 1000;
byte b2 = 3;

原因在于:jvm在编译过程中,对于默认为int类型的数值时,当赋给一个比int型数值范围小的数值类型变量,会进行判断,如果此int型数值超过数值类型,那么会直接编译出错。但是如果此int型数值尚在数值类型范围内,jvm会自动进行一次隐式类型转换。

加载全部内容

相关教程
猜你喜欢
用户评论