首页 > 技术文章 > 基本数据类型和引用类型的区别

q2546 2019-08-22 17:13 原文

基本数据类型: byte: JAVA中数据类型最小的单位,在内存中占8个位(bit),占一个字节,取值范围为-128~127,默认为0;  short: 短整型,在内存中占16位,即占2个字节,取值范围为-32768-32717,默认为0;  int: 整型,在内存中占32位,即占4个字节,取值范围为-2147483648~2147483647,默认为0;  long: 长整型,内存中占64位,即占8个字节,取值范围为-2^63~2^63-1,默认值OL;  float: 浮点型,在内存中占32位,即4个字节,用于存储带小数的数字(与double的区别是有效小数点只有6~7位有效数字),默认为0;        double: 双精度浮点型,也是用于存储带小数的数字(有效小数点后只有16位有效数字),在内存中占64位,即8个字节,默认为0;  char:字符型,用于存储单个字符,在内存中占16位,占2个字节,取值范围0~65535,默认值为空; boolean:布尔类型,占一个字节,用于判断真或假(仅有2个值,即true和false),默认为false; Java数据类型基本概念: 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复杂的、简单的,各种数据类型都需要在学习初期去了解,Java是强类型语言,所以Java对于数据类型的规范会相对严格。数据类型是语言的抽象原子概念,可以说是语言中最基本的单元定义,在Java里面,本质上讲将数据类型分为两种:基本类型和引用数据类型。 基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义的,它表示了真实的数学、字符和整形。  引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。比如Android的jni层。java中的数据类型与内存的关系  在Java中,每个存放的变量都是有数据类型,比如: char ch;float x;int a,b,c; ch是字符型的,就会分配到2个字节内存。不同类型的变量在内存中分配的字节数不同,同时存储方式也是不同的。  所以给变量赋值前需要先确定变量的类型,确定了变量的类型,即确定了数据需分配内存空间的大小,数据在内存的存储方式。Java数据类型在内存中的存储: 1:基本数据类型的存储原理: 所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型;  2:引用类型的存储原理: 引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;        区别:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要java中的栈、堆概念),基本类型和引用类型的内存模型本质上是不一样的。    例1:我们分析一下”==“和equals()的区别。    首先,我定以两个String对象    Stringa="abc";    Stringb="abc";    然后    if(a==b){    System.out.println("a==b");    }else{    System.out.println("a!=b");}    程序输出a!=b    原因:a和b的地址是不相同的,a==b比较的是两个变量的地址    例2:定义两个基本类型    int a=4;    int b=4;    if(a==b){System.out.println("a==b");}    else    {System.out.println("a!=b");}    输出:a==b    原因:==比较的是两个变量的内容

推荐阅读