Java基本数据类型

1.概述

佛说,大千世界,无奇不有。在这个世界里,物种的多样性,遍地开花,同样,在Java的世界里,也有着异曲同工之妙,Java秉承面向对象的特性,必然少不了区分对象的类型,就像下图的“CuteCat”,它描述着在现实世界中存在的事物,同时也是今天我们要说的Java数据类型。

Java基本数据类型_第1张图片

Java中的数据类型可划分为两种:

1)基本数据类型

基本数据类型是Java语言中数据操作的基础,包括byteshortintlongfloatdoublecharboolean

2)引用数据类型

引用数据类型包括类(class)、接口(interface)、数组。

如果只看文字描述的话,可能没有那么直观,上图自己体会。

Java基本数据类型_第2张图片

那么首先来看看基本数据类型,不同的数据类型有着不同的默认值以及取值范围,既然取值范围不同,其所占用的内存空间也是不同的。来看下表:

数据类型 默认值 取值范围 内存占用
byte 0 -128127(-2^72^7-1) 1字节(8位)
short 0 -3276832767(-2^152^15-1) 2字节(16位)
int 0 -2,147,483,6482,147,483,647(-2^312^31-1) 4字节(32位)
long 0L -263~263-1 8字节(64位)
float(单精度) 0.0f 1.4E-45~3.4028235E+38 4字节(32位)
double(双精度) 0.0d 4.9E-324~1.7976931348623157E+308 8字节(64位)
char ‘\u0000’ ‘\u0000’(十进制0)~‘\uFFFF’(十进制65535) 2字节(16位)
boolean false true、false 1字节(8位)

2.基本数据类型

通过上面的介绍,相信大家对基本数据类型已经有一个大致的了解,接下来继续详细说明。

2.1 byte

byte类型属于整型,最小值为-128,最大值为127,默认值为0,内存占用为1字节。在编写程序时,如果可以确定变量的取值范围,为了节省空间,可以使用byte来存储数据。代码示例:

byte b1 = -128byte b2 = 127;

2.2 short

short类型属于整型,最小值为-32768,最大值为32767,默认值为0,内存占用为2字节。代码示例:

short s1 = -32768;
short s2 = 32767;

2.3 int

int类型属于整型,最小值为-2,147,483,648,最大值为2,147,483,647,默认值为0,内存占用为4字节。代码示例:

int i1 = -2,147,483,648int i2 = 2,147,483,647

2.4 long

long类型属于整型,最小值为-9,223,372,036,854,775,808,最大值为-9,223,372,036,854,775,807,默认值为0,内存占用为8字节。代码示例:

long l1 = -9,223,372,036,854,775,808;
long l2 = 9,223,372,036,854,775,807;

2.5 float

float类型属于单精度浮点型,小数点有效位数为7位,最小值为1.4E-45,最大值为3.4028235E+38,默认值为0.0f,内存占用为4字节。示例代码:

float f  = 1.1f

2.6 double

double类型属于双精度浮点型,小数点的有效位数为16位,最小值为4.9E-324,最大值为1.7976931348623157E+308,默认值为0.0,内存占用为8字节。

double d = 1.1;

2.7 char

char类型可以表示一个16位的Unicode字符,最大值为’\uFFFF’(十进制65535),最小值为’\u0000’(十进制0),内存占用为2字节。代码示例:

char c = 'A';

**Tips:**编码类型不同,一个字符所在的内存空间也就不同。

  • ASCII编码:一个英文字符占一个字节,一个中文字符占两个字节。

  • Unicode编码:一个英文字符和一个中文字符占都两个字节。

  • utf8编码:一个英文字符占一个字节,一个中文字符占三个字节。

2.8 boolean

boolean类型的值分别为true、false,通常用于条件判断。代码示例:

boolean flag = true

3.基本数据类型转换

3.1 为什么需要类型转换

类型转换?为什么Java基本数据类型之间会涉及到类型转换呢?

试想一下在现实世界中,如果将一个苹果和一个梨拿来比较,由于苹果和梨是两个不同的类型,自然是无法进行比较的。同理,Java是强类型语言,所以要求在执行赋值运算和算术运算的时候,参与运算的数据类型必须保持一致。

3.2 哪些基本数据类型可以相互转换

除了boolean类型,其余的数据类型在内存中存储的都是数值,因此,除了Boolean类型,其余的数据类型之间都可以相互转换。

3.3 类型转换方式

  • 隐式类型转换

取值范围小的数据类型向取值范围大的数据类型转换时,可以自动转换,也叫隐式类型转换,有种大鱼吃小鱼的感觉。示例代码:

byte b =127;
short s = b;
int i = s;
long l = i;
float f = l;
double d = f;

如果是进行算数运算,也会进行类型自定转换:

1、如果其中一个数是double类型,其余的数也会转换为double类型。

2、如果其中一个数是float类型,其余的数也会转换为float类型。

3、如果其中一个数是long类型,其余的数也会转换为long类型。

Java基本数据类型_第3张图片

我们再来看看这几种基本类型之间的隐式转换关系,实线表示无精度丢失,虚线表示可能会出现精度丢失。比如1234567890是一个10位的int类型的整数,它包含的位数比float类型所能够表达的位数多,在进行转换时就会出现精度丢失。

  • 强制类型转换

取值范围大的数据类型向取值范围小的数据类型转换时,无法进行自动转换,需要我们为其指定显式的类型转换。进行强制类型转换容易造成数据异常,就像小鱼吃大鱼一样,如果硬把大鱼塞给小鱼吃,那必然是对小鱼的巨大破坏。代码示例:

long l = 9223372036854775807L;
int i = (int) l;// i的值为-1。

**Tips:**整型之间的隐式转换不会出现精度的丢失,整型和浮点型之间的类型转换可能会出现精度丢失。

你可能感兴趣的:(java,java)