存储类型默认分配
① 51单片机定义变量时默认是存储到哪里的
未显式声明的情况下,变量会根据Memory Model的设置,默认分配在指定的存储区。
Small模式:默认分配在data区
Compact模式:默认分配在pdata区
Large模式:默认分配在xdata区
新建工程默认都是Small模式,所以未显式声明存储区域的变量都会分配在data区的。所以才会容易出现data区挤爆、编译器跳着脚让你把变量分到idata区去……
② Java基本数据类型
一、基本数据类型:
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0
short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0
int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0
long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L
float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0
double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0
char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空
boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false
二、Java数据类型基本概念:
数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复杂的、简单的,各种数据类型都需要在学习初期去了解,Java是强类型语言,所以Java对于数据类型的规范会相对严格。数据类型是语言的抽象原子概念,可以说是语言中最基本的单元定义,在Java里面,本质上讲将数据类型分为两种:基本类型和引用数据类型。
基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。
引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。
三、Java中的数据类型与内存的关系
在Java中,每个存放数据的变量都是有类型的,如:
charch;floatx;inta,b,c;
ch是字符型的,就会分配到2个字节内存。不同类型的变量在内存中分配的字节数不同,同时存储方式也是不同的。
所以给变量赋值前需要先确定变量的类型,确定了变量的类型,即确定了数据需分配内存空间的大小,数据在内存的存储方式。
四、Java数据类型在内存中的存储:
1)基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型;
2)引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,回龙观北大青鸟认为“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的。
③ int和Integer范围 int和integer
int和Integer的范围:
int的范围:
- 简介:int是Java提供的8种原始数据类型之一,用于存储整数值。
- 范围:int类型在Java中占4个字节(32位),其取值范围是-2^31到2^31-1,即-2147483648到2147483647。
- 默认值:int类型的默认值是0。
Integer的范围:
- 简介:Integer是Java为int类型提供的封装类,属于引用数据类型。它扩展了int类型,并定义了许多转换方法。
- 范围:从数值范围的角度看,Integer封装了int类型的值,因此其数值范围与int相同,即-2^31到2^31-1。但需要注意的是,Integer作为对象,其“范围”还涉及到对象的创建、比较、内存分配等方面。
- 默认值:Integer类型的默认值是null,表示未初始化或未指向任何Integer对象。
- 内存占用:虽然Integer对象本身占用的内存不止4个字节(因为还包括对象头和可能的对齐填充等),但用于存储int值的部分仍然是4个字节。Integer对象占用的总内存大小取决于JVM的实现和对象的内部状态。
int与Integer的主要区别:
- 类型:int是基本数据类型,直接存储数值;Integer是引用数据类型,用引用指向对象。
- 默认值:int的默认值是0;Integer的默认值是null。
- 存储原理:int是值传递,存储在栈中,数据不可变;Integer是引用传递,存储在堆中,引用指向的内存地址中的数据可以变化,但栈中的引用不变。
- 内存分配:声明为int的变量不需要实例化,直接分配内存;声明为Integer的变量需要实例化,使用new为其分配内存。
总结:int和Integer在数值范围上是一致的,都表示-2^31到2^31-1的整数。但它们在类型、默认值、存储原理、内存分配等方面存在显着区别。int是基本数据类型,直接存储数值,适用于高效的数值计算;而Integer是引用数据类型,提供了更多的面向对象特性和方法,适用于需要封装和转换的场景。