Skip to content

Java数据类型 迁移

Java是强类型语言

  • 所有变量必须先声明后使用
  • 指定类型的变量只能接受符合其类型的值

Java有四类八种基本数据类型

类别类型占用字节取值范围包装类
整型byte(字节型)1-128~127(-2的7次方到2的7次方-1)Byte
short(短整型)2-32768~32767(-2的15次方到2的15次方-1)Short
int(整型)4-2147483648~2147483647(-2的31次方到2的31次方-1)Int
long(长整型)8-9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)Long
浮点型float(浮点型)43.402823e+38~1.401298e-45(e+38 表示乘以10的38次方,而e-45 表示乘以10的负45次方Float
double(双精度浮点型)81.797693e+308~4.9000000e-324(e+38 表示乘以10的38次方,而e-45 表示乘以10的负45次方Double
布尔型boolean(布尔型)1true falseBoolean
字符型char(字符型)2汉字字母都可以Character

详细介绍

  • 整型(byte、short、int、long)

可以从上表看出 byte、short 的取值范围比较小,而long的取值范围是最大的,所以占用的空间也是最多的。int 取值范围基本上可以满足我们的日常计算需求了,所以 int 也是我们使用的最多的一个整型类型。

  • 浮点型(float、double)

double 类型比float 类型存储范围更大,精度更高。

通常的浮点型数据在不声明的情况下都是double型的,如果要表示一个数据时float 型的,可以在数据后面加上 F 。

浮点型的数据是不能完全精确的,有时候在计算时可能出现小数点最后几位出现浮动,这时正常的。

  • 布尔型(boolean)

boolean在编程中很常见 一般用来做逻辑判断 值为true或者false

  • 字符型(char)

char 有以下的初始化方式:

char ch = 'a'; // 可以是汉字,因为是Unicode编码

char ch = 1010; // 可以是十进制数、八进制数、十六进制数等等。

char ch = '\0'; // 可以用字符编码来初始化,如:'\0' 表示结束符,它的ascll码是0,这句话的意思和 ch = 0 是一个意思。

Java是用unicode 来表示字符,“中” 这个中文字符的unicode 就是两个字节。

String.getBytes(encoding) 方法获取的是指定编码的byte数组表示。

通常gbk / gb2312 是两个字节,utf-8 是3个字节。

如果不指定encoding 则获取系统默认encoding 。

基本类型之间的转换

将一种类型的值赋值给另一种类型是很常见的。在Java中,boolean 类型与其他7中类型的数据都不能进行转换,这一点很明确。但对于其他7种数据类型,它们之间都可以进行转换,只是可能会存在精度损失或其他一些变化。

转换分为自动转换和强制转换:

自动转换(隐式):无需任何操作。

强制转换(显式):需使用转换操作符(type)。

将6种数据类型按下面顺序排列一下:

double > float > long > int > short > byte

如果从小转换到大,那么可以直接转换,而从大到小,或char 和其他6种数据类型转换,则必须使用强制转换。

  • 自动类型转换

较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。自动转换不会出现任何运行时(run-time)异常。在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他的转换都不能出现精度损失

  1. int--> float
  2. long--> float
  3. long--> double
  4. float -->double without strictfp
  • 强制类型转换

如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。强制转换采用转换操作符()。严格地说,将byte转为char不属于narrowing conversion),因为从byte到char的过程其实是byte-->int-->char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化

7种基本类型转换总结如下图

区分基本数据类型和引用数据类型

  • 基本数据类型

在栈中可以直接分配内存的数据是基本数据类型。

  • 引用数据类型

是数据的引用在栈中,但是他的对象在堆中。

参考文章

Java 基本数据类型 - 四类八种

java四类八种基本数据类型