云乐国鑫

JAVA数据类型

数据类型

基本数据类型

变量名指向具体数值,变量声明后,Java 立即分配内存空间。

基本数据类型:byte、short、int、long、float、double、char、boolean。

整数类型

byte(8位)
  • 8位、有符号的以二进制补码表示的整数
  • min : -128(-2^7)
  • max: 127(2^7-1)
  • default: 0
  • 对应包装类:Byte
short(16位)
  • 16位、有符号的以二进制补码表示的整数
  • min : -32768(-2^15)
  • max: 32767(2^15 - 1)
  • default: 0
  • 对应包装类:Short
int(32位)
  • 32位、有符号的以二进制补码表示的整数
  • min : -2,147,483,648(-2^31)
  • max: 2,147,483,647(2^31 - 1)
  • default: 0
  • 对应包装类:Integer
long(64位)
  • 64位、有符号的以二进制补码表示的整数
  • min : -9,223,372,036,854,775,808(-2^63)
  • max: 9,223,372,036,854,775,807(2^63 -1)
  • default: 0
  • 对应的包装类:Long

浮点数类型

float(单精度、32位)
  • 单精度、32位、符合IEEE 754标准的浮点数
  • float 在储存大型浮点数组的时候可节省内存空间
  • 浮点数不能用来表示精确的值,如货币
  • default: 0.0f
  • 对应的包装类:Float
double(双精度、64位)
  • 双精度、64位、符合IEEE 754标准的浮点数
  • 浮点数的默认类型为double类型
  • double类型同样不能表示精确的值,如货币
  • default: 0.0d
  • 对应的包装类:Double

字符类型

char(16位 Unicode)
  • char类型是一个单一的 16位 Unicode 字符
  • 最小值是 \u0000(即为0)
  • 最大值是 \uffff(即为65,535)
  • char 数据类型可以储存任何字符
  • 对应的包装类:Character

布尔类型

boolean(8位)
  • boolean数据类型表示一位的信息
  • 只有两个取值:true 和 false
  • 这种类型只作为一种标志来记录 true/false 情况
  • 对应的包装类:Boolean

数据类型转换

自动转换

也称隐式类型转换。

由系统自动完成的类型转换。

从存储范围小的类型到存储范围大的类型。

byte→short(char)→int→long→float→double

强制转换

也称显式类型转换。

必须书写代码才能完成的类型转换。

可能存在精度的损失。

从存储范围大的类型到存储范围小的类型。

double→float→long→int→short(char)→byte

(转换到的类型)需要转换的值。

包装类型

提供一种机制,使得基本数据类型与引用类型互相转换

Byte <-> byte
Short <-> short
Integer <-> int
Long <-> long
Float <-> float
Double <-> double
Character <-> char
Boolean <-> boolean

装箱(boxing)

将值类型转换为引用类型。

通过调用包装类的valueOf方法实现。

拆箱(unboxing)

将引用类型转换为值类型。

通过调用包装类的xxxValue方法实现。

自动装拆箱

自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。

装箱拆箱方法在编译成class文件时自动加上,不需要程序员手工介入

Integer i = 10;  // 自动装箱
int n = i;   // 自动拆箱

引用数据类型

变量名指向存数据对象的内存地址,以特殊的方式(类似 C 指针)指向对象实体(具体的值),这类变量声明时不会分配内存,仅存储一个内存地址。

引用数据类型有两块存储空间,一个在栈(Stack)中,一个在堆(Heap)中,栈中存放的是堆中的地址。

使用 new 关键字创建出来的类型都是引用数据类型,包含类、接口、数组。

值传递

方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数后面方法中的操作都是对形参这个值的修改,不影响实际参数的值

Java中只有按值传递。不管是基本类型还是引用类型,形参都是实参的一个拷贝。

引用传递

也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象

值传递和引用传递可以得出这样的结论:
(1)基本数据类型传值,对形参的修改不会影响实参;
(2)引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象;
(3)String, Integer, Double等immutable的类型特殊处理,可以理解为传值,最后的操作不会修改实参对象。
posted @ 2015-03-10 15:07  国鑫  阅读(123)  评论(0编辑  收藏  举报
版权所有@snzigod