java的数据类型的解析

Posted fuyunhou-boke-07

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的数据类型的解析相关的知识,希望对你有一定的参考价值。

Java学习总结——Java中的数据类型及其详细

伍——数据类型

一、数据类型的意义

在Java语言中,每个变量(常量)都有其数据类型。不同的数据类型可允许的操作也是不尽相同的。比如,对于整型数据,它们只能进行加减乘除和求余的操作。此外,不同的数据占据的内存空间大小也是不尽相同的。而在必要时,不同的数据类型也是可以做到强制类型转换的。

在Java之中,数据类型一共分为两大类:基本数据类型、引用数据类型。

在Java中规定了 8 种基本数据类型变量来存储、浮点数、字符和布尔值。如下所示:

数据类型
基本数据类型 数值型 整数类型:byte、short、int、long
浮点类型:float、double
字符型 char
布尔型 boolean
引用数据类型 class
接口 interface
数组 array

 

不同类型的变量,其能表示的数据范围也是不同的。Java的基本数据类型占用内存位数及可表示的数据范围如下表所示:

数据类型 位数(bit) 可表示的数据范围
long(长整型) 64位 -9223372036854775808 ~ 9223372036854775807
int(整型) 32位 -2147483648 ~ 2147483647
short(短整型) 16位 -32768 ~ 32767
char(字符) 16位 0 ~ 65535
byte(字节) 8位 -128 ~ 127
boolean(布尔) 1位 true 或 false
float(单精度) 32位 -3.4E38(-3.4 x 10^38)~ 3.4E38(3.4 x 10^38)
double(双精度) 64位 -1.7E308(-1.7 x 10^308)~ 1.7E308(1.7 x 10^308)

 

二、整数类型

整数类型(Integer),简称整型,表示的是不带有小数点的数字。一共有 4 种不同类型的整型,按照占据空间大小的递增次序,分别为byte(位)、short(短整型)、int(整数)及long(长整数)。默认情况下,整型指 int 型。

1.byte 类型

在Java中,byte类型占据1字节内存空间,数据的取值范围为: -128 ~ 127。

每种基本的数据类型都有几个静态属性,如MAX_VALUE(最大值)、MIN_VALUE(最小值)、SIZE(大小)、TYPE(类型)等。要得到这些值,可用名称为该类型首字母大写对象(如 byte 类型对应 Byte 对象)通过点( . )操作符将其读取出来。Byte 类将基本类型 byte 的值包装在一个对象中。一个 Byte 类型的对象只包含一个类型为 byte 的字段。

Byte 类常见的静态属性如下:

属性名称 属性值
MAX_VALUE 最大值:2^7 - 1 = 127
MIN_VALUE 最小值:-2^7 = -128
SIZE 所占的内存位数(bit):8 位
TYPE 数据类型:byte

2.short 类型

short 类型数据占据 2 个字节内存空间,取值范围为:-32768 ~ 32767。

例如:获得短整数所能表达的最大数值(Short.MAX_VALUE)。

3.int 类型

int 类型数据占据 4 个字节内存空间,取值范围为:-2147483648 ~ 2147483647。

注意:由于每一种类型都有其对应范围的最大或最小值,如果在计算的过程之中,超过了此范围(大于或小于最小值),那么就会产生数据溢出(overflow)的问题。

扩展:lang 是 language(语言)的简写。

4.long 类型

long类型数据占据 8 个字节内存空间,取值范围为:-9223372036854775808 ~ 9223372036854775807。

注意:想要解决数据溢出问题,那么最好的做法是扩大数据的操作范围,比 int 范围大的是 long 类型,所以可将其扩充为 long,有两种方式扩充。

(1)直接在数据前增加一个“(long)”;

(2)直接在数据后增加一个字母“ L ”。

例:max + (long)1;或者 max + 2L;

低字节类型数据与高字节数据运算,其结果自动转变为高字节数据,因此,int 型与 long 型运算的结果是 long 型。

三、浮点类型

Java浮点数据类型主要有双精度 double 和单精度 float 两个类型。

double 类型:共 8 个字节,64 位,第 1 位为符号位,中间 11 位表示指数,最后 52 位为尾数。

float 类型:共 4 个字节,32 位,第 1 位为符号位,中间 8 位表示指数,最后 23 位为尾数。

1.float 类型

含小数点的实数默认为 double 类型数据,如果定义的是 float 型数据,为其赋值的时候,必须执行强制转型,有两种方式。

(1)直接加上字母 “ F ”,或小写字母 “ f ”。例如:“ float num = 1.5F; ” 或 “ float num = 1.5f; ”。

(2)直接在数字前加强转型为 “ float ”。例如:“float num = (float) 1.2; ”。

2.double类型

当浮点数的表示范围不够大的时候,还有一种双精度(double)浮点数可供使用。双精度浮点数类型的长度为 64 个字节,有效范围为:-1.7E308(-1.7 x 10^308)~ 1.7E308(1.7 x 10^308)。

Java提供了浮点数类型的最大值与最小值的代码,其所使用的类全名与所代表的值的范围,可以通过下表查询:

类别 float double
使用类全名 java.lang.Float java.lang.Double
最大值 MAX_VALUE MAX_VALUE
最大值常值 3.4028235E38 107976931348623157E308
最小值 MIN_VALUE MIN_VALUE
最小值常值 1.4E—45 4.9E—324

 

在类全名中,可以省去类库 java.lang,直接取用类名称即可。

四、字符类型( char )

字符就是字母和符号的统称。

字符类型在内存中占有 2 个字节,定义时语法为:

    char a = ‘A‘;    //声明 a 为字符型,并赋初值为 ‘A‘ 。

字符要用一对单引号( ‘ ‘ )括起。但如果把一个字符变量赋值成一个单引号,就有了转义字符的概念。转义字符就是用不容易混淆的字符来代替那些敏感字符,它们作为一个整体使用。

下表为常用的转义字符:

转义字符 所代表的意义 转义字符 所代表的意义
\f 换页 \\ 反斜线
\b 倒退一格 \‘ 单引号
\r 归位 \" 双引号
\t 跳格 \n 换行

不管使用变量存放转义字符,还是直接使用转义字符的方式来输出字符串。

Java 中默认采用的编码方式为 Unicode 编码,此编码是一种采用十六进制编码方案,可以表示出世界上的任意的文字信息。所以在 Java 中,单个字符里面是可以保存中文字符的,一个中文字符占据 2 个字节。这点是与 C/C++ 对字符型的处理是有区别的,在 C/C++中,中文字符只能当做长度为 2 的字符串处理。

注意:char 和 int 型数据的互相转换的问题。遵循 C 语言常用的 ASCII 码的习惯,字母的表示范围是:  大写字母 A ~ Z对应整数 65 ~ 90、小写字母 a ~ z 对应整数 97 ~ 122、字符 0 ~ 9 对应整数 49 ~ 57。

提示:ASCII(American Standard Code for Information Interchange,美国标准信息交换码)是计算机中用的最广泛的字符集及其编码,由美国国家标准局(ANSI)指定,已被国际标准化组织(ISO)定为国际标准。

五、布尔类型( boolean )

布尔( Boolean )本是一位英国数学家的名字。在 Java 中使用关键字 boolean来声明布尔类型。被声明为布尔类型的变量,只有 true(真)和 false(假)两种。除此之外,没有其他的值可以赋值给这个变量。

声明布尔类型语句为true:

    boolean 变量名 = ture;    //声明布尔变量,并赋值为 true

布尔类型主要用于逻辑判断,通常用来控制程序的流程。

六、数据类型的转换

数据类型的转换方式可分为 “ 自动类型转换 ” 及 “ 强制类型转换 ” 两种。

1.自动类型转换

在程序中已定义好了的数据类型的变量,若想转换用另一种数据类型表示时,Java 会在下面 2 个条件皆成立时,自动进行数据类型的转换。

(1)转换前后的数据类型要相互兼容。在 C/C++ 中,整型和布尔类型的关系是 “ 非零即为真 ” —— 凡是不是零的整数都可以认为布尔值为真变量,二者是兼容的,所以可以相互转换。而在 Java 中,由于 boolean 类型只能存放 true 或 false ,与整数及字符不兼容,因此 boolean 类型不可能与其他任何数据类型进行转换。整数与浮点数亦是兼容的,所以可以相互转换。

(2)转换后的数据类型的表示范围不小于转换前的类型。Java 在进行数值运算时,以尽量不损失精度(正确性)为原则。因此需要将字符型的变量转换为整型变量,否则将 4 字节整型变量转换为 2 字节的字符型,很有可能导致整型变量的值会溢出,从而导致计算错误。字符与整数是可使用自动类型转换的。

其相互转换的规则如下:

操作数1类型 操作数2类型 转换后的类型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double

所以,自动数据类型转换的规律为:byte → short → char → int → long → float → double,按照范围由小到大实现自动转型操作。

2.强制类型转换

当程序需要转换数据类型时,可实施强制性的类型转换,其语法如下:

    (欲转换的数据类型)变量名称;

当两个整数相除时,小数点以后的数字会被阶段,使得运算的结果保持为整数。而想得到浮点数结果,就必须将两个整数中的一个(或是两个)强制转换为浮点数,以下为 3 种正确的写法:

(1)(float)a/b;    //将整数 a 强制转换成浮点数,再与整数 b 相除

(2)a/(float)b;    //将整数 b 强制转换成浮点数,再与整数 a 除以

(3)(float)a/(float)b;    //将整数 a 与 b 同时强制转换成浮点数,再相除

只要在变量前面加上欲转换的数据类型,运行时就会自动将此行语句里的变量做类型转换的处理,但这并不影响原先所定义的数据类型。此外,讲一个超出该变量可表示范围的值赋给这个变量,这种转换称为缩小转换。由于在转换的过程中可能会丢失数据的精确度,因此 Java 并不会 “ 自动 ” 做这些类型的转换,此时就必须要做强制性的转换。

七、基本数据类型的默认值

在 Java 中,若在变量的声明时没有赋初始值,则会给该变量赋默认值。

下表为各类型的默认值:

数据类型 默认值
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
char \u0000(空)
boolean false

 

在某些情况下,Java 会给予这些没有赋初始值的变量一个确切的默认值,这个值没有任何意义,只是保证程序执行时,不运行有这种没有初始化值的变量存在。

八、本文注意事项

1.整型数的除法要注意。

整数与整数运算,其结果还是整数。

2.C/C++ 语言和 Java 语言在布尔类型上存在显著差别。

C/C++遵循的规则是 “ 非零即为真 ”,即所有不是零的数,都可认为是 “ true ” ,而仅把 0 当做 false。

而 Java 语言的布尔类型变量,其赋值只能是 true(真)和 false(假)两种,所以,Java 语言中的布尔类型与整型无关。

以上是关于java的数据类型的解析的主要内容,如果未能解决你的问题,请参考以下文章

java装箱跟拆箱解析

千锋郑州Java培训为你解析常见的数据库类型

Java面试题答案解析: 基础考核-拆箱装箱, 数据类型, MAP

Java中equals和==的解析

03_2_JAVA中的面向对象与内存解析

Java: 如何把String类型数据 A 转化为 int类型数据65?