Java数据类型分为基本数据类型与引用数据类型。
1 基本数据类型
byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0
short:短整型,2个字节(16 bit),取值范围-32768~32717,默认值0
int:整型,用于存储整数,在内存中占4个字节,取值范围-2147483648~2147483647,默认值0
long:长整型,在内存中占8个字节-2^63~2^63-1,默认值0L
float:浮点型,在内存中占4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0
double:双精度浮点型,用于存储带有小数点的数字,在内存中占8个字节,默认值0
char:字符型,用于存储单个字符,内存中占2个字节,取值范围0~65535,默认值为空
boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false
2 引用类型
Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。引用类型分3种:类,接口,数组;
类(Class):所有的类,无论是Java自身已经存在的,还是用户后来创建的;
Objec类:它是所有类的父类,每个类都实现这个类的方法;用Object 可以定义所有的类;
String:String类代表字符串,Java
接口(interface): 系统自带或者用户创建的
数组(array): 系统自带或者用户创建的
3 Java中的数据类型在内存的存储原理
(1) 基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,Java语言里面八种数据类型是这种存储模型;
(2) 引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”(存储对象在内存堆上的地址)是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;
基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的
举例说明
我们分析一下 == 和equals()的区别
首先,定义两个String 数组对象
String[] a={"latiny1","latiny2"};
String[] b={"latiny1","latiny2"};
然后比较
if(a==b)
{
System.out.println("a==b");
}
else
{
System.out.println("a!=b");
}
程序输出a!=b
原因:a和b的地址是不相同的,a==b比较的是两个变量的地址,数据a与b的地址不一样
不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。
4 基本类型转换
(1)自动类型转换
Java所有的数值类型变量都可以互相转换,如果系统把某种基本类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动类型转换。
int e = 1;
double d =e;
以上代码不会报错,系统会自动转换。
(2) 强制类型转换
当把一个范围大的数值或变量赋给另一个范围小的变量时,需要进行强制转换。
double d =1.5;
int e = d;
以上代码会报错,把大范围的数值赋给小范围的变量,需要强制转换,这样才能通过编译,且大范围的数值会丢失精度。
int e = (int) d;