java基本数据类型

通常来讲,java所有的对象都存储在堆中,对象引用存储在栈中,然后基本类型却是一个特例。由于用new创建一个对象,特别是小的、简单的变量,往往不是很有效,所以不用new来创建基本类型,而是创建一个并非是引用的“自动“变量,这个变量直接存储”值“,并置于堆栈中。

所以说,基本类型存在堆栈中(局部变量表)。

java确定每种基本类型所占存储空间的大小,不像其他大多语言那样随机器硬件架构的变化而变化,保证了可移植性

基本类型 大小 最小值 最大值 包装器类型
boolean - - - Boolean
char 16-bit Unicode 0 Unicode 2^16 - 1 Character
byte 8 bits -128 +127 Byte
short 16 bits -2^15 +2^15 - 1 Short
int 32 bits -2^31 +2^31 -1 Integer
long 64 bits -2^63 +2^63 - 1 Long
float 32 bits IEEE754 IEEE754 Float
double 64 bits IEEE754 IEEE754 Double
void - - - Void

8种基本类型(primitive type)

  • 4种整型
    • byte
    • short
    • int
    • long
  • 2种浮点类型
    • float
    • double
  • 1种用于表示Unicode编码的字符单元的字符类型char
    • char
  • 一种用于表示真值的boolean类型
    • boolean

整型

类型 存储需求 取值范围
int 4字节 - 2 147 483 648 ~ 2 147 483 647(正好超过20亿)
short 2字节 - 32 768 ~ 32 767
long 8字节 - 9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
byte 1字节 - 128 ~ 127
  • int类型最常用
  • java中,所有的数值类型所占据的字节数量与平台无关
  • 长整型数值有一个后缀L或l(如40000000000L
  • 十六进制前缀0x或0X,八进制前缀0,如 010 对应八进制的8,容易混淆,不建议使用
  • java 7 开始,加上前缀0b或0B表示二进制,还可以为数字字面量加下划线,更易读(如 0b1111_0100_0010_0100_00001_000_000表示一百万),java编译器会去掉这些下划线
  • java没有任何无符号形式的整型

浮点类型

类型 存储需求 取值范围
float 4字节 大约 +- 3.402 823 47E+38F(有效位数为 6~7 位)
double 8字节 大约 +- 1.797 693 134 862 315 70E+308(有效位数为 15 位)
  • double的数值精度是float类型的二倍(双精度数值)
  • 绝大部分程序采用double类型
  • float类型的数值有一个后缀Ff,没有后缀F的浮点数值默认为double类型,也可以有后缀Dd
  • 十六进制表示法
    • 64 = 16 * 2^2 可以表示成 0x10.0p2
    • p表示指数,尾数采用十六进制,指数采用十进制,基数是2
  • 所有浮点数值计算都遵循 IEEE 754 规范,表示溢出和出错的三个特殊的浮点数值
    • 正无穷大:Double.POSITIVE_INFINITY
    • 负无穷大:Double.NEGATIVE_INFINITY
    • NaN(Not a Number):Double.NaN
      • 不能检测一个特定值是否等于 Double.NaN
      • 可以使用 Double.isNaN()方法

char类型

  • 16bit,两个字节
  • char类型的字面量值要用单引号括起来
  • 值可以表示为十六进制值,范围从 \u0000 到 \Uffff
  • char类型描述了 UTF-16编码中的一个代码单元

boolean类型

  • 两个值:false true
  • 所占存储空间大小没有明确定义
  • 整型值和布尔值之间不能进行相互转换

类型转换

两个不同数值类型进行二元操作时,先要将两个操作数类型转换为同一种类型,然后再进行计算:

  • 如果两个操作数中的一个是double类型,另一个操作数就会转换为double类型
  • 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型
  • 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型
  • 否则,两个操作数都将被转换为int类型

实心箭头表示无信息丢失的转换,虚箭头表示可能有精度损失的转换

java基本类型转换

基本成员默认值

若类的某个成员是基本数据类型,即使没有进行初始化,java也会确保它获得一个默认值

基本类型 默认值
boolean false
char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

上述初始化方法并不适用于”局部“变量(即并非某个类的字段),如在某个方法中定义:

int x;

变量x得到的可能是任意值,而不会被初始化为0,所以在使用前,应该对其赋值,否则java编译器会报错(不使用不会报错)。

posted @ 2019-03-18 22:27  mytlx  阅读(166)  评论(0编辑  收藏  举报