百度搜到的两篇文章:
第一篇
java中的数据类型分为两大类:基本数据类型和引用数据类型
基本数据类型,包括数值型,字符型和布尔型。
数值型:1)整型:byte 1个字节;short 2个字节;int 4个字节;long 8个字节。
2)浮点型:float 4个字节;double 8个字节;可以采用十进制和十六进制两种表示方式,其中十六进制表示方法只能采用科学计数法,例如:0x1.2p3,表示的是的是1乘以16加上2乘以16的-1次方的和乘以2的三次方;浮点型的默认类型为DOUBLE型,如果声明float型浮点数,要在数值后面加上f或F,例如:float f1 = 3.14F;否则会报精度错误。
字符型:char 采用unicod的16位编码方式进行编码。
布尔型:true,false;
引用数据类型:类、接口类型、数组类型、枚举类型、注解类型;
基本数据类型和引用数据类型的区别主要在存储方式上:
基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上;
引用数据类型在被床架时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。
例如:我有一个类MyDate,其中有属性day,mouth,year等,有构造方法(带参数);
现在为其创建一个对象MyDate d1 = new MyDate(8,8,2008);
在内存中的具体创建过程是:
1)首先在栈内存中位其d1分配一块空间;
2)然后在堆内存中为MyDate对象分配一块空间,并为其三个属性设初值0,0,0;
3)根据类MyDate中对属性的定义,为该对象的三个属性进行赋值操作;
4)调用构造方法,为三个属性赋值为8,8,2008;(注意这个时候d1与MyDate对象之间还没有建立联系)
5)将MyDate对象在堆内存中的地址,赋值给栈中的d1;通过句柄d1可以找到堆中对象的具体信息。
呵呵,引用数据类型的创建还真是挺复杂的一个过程。。。
第二篇
┏数值型━┳━整数型:byte short int long
┏基本数据类型━━┫ ┗━浮点型:float double
┃ ┣字符型:char
数据类型╋ ┗布尔型:boolean
┃ ┏类(class)
┗引用数据类型━━╋接口(interface)
┗数组(array)
java的数据类型分基本数据类型(原始数据类型)和引用数据类型;
基本数据类型:
基本数据类型基本上都是一些特别小而且特别简单的变量,如果用new创建对象,由于new创建的对象都是存放在堆中,大家知道,由于堆的灵活性决定它的效率要低于堆栈,所以对于8种基本数据类型,Java不采用new创建句柄的方式,而是直接在堆栈中创建了一个非句柄的自动变量,容纳了具体的值,所以能够高效存取。
引用数据类型:
引用数据类型就那三种,类似C/C++的指针,它以特殊的方式指向对象实体(具体的值),这类变量声明时不会分配内存,new的时候,存储了一个句柄在堆栈中以便高效引用,其对象实体(具体的值)在堆中开辟了一块内存,通过堆栈中的句柄调用该实体。