资源描述
Java中的基本数据类型Java 中的数据类型可以分为两种:基本数据类型整型 byte short int long 浮点型 float double 字符型 char布尔型 boolean引用数据类型可以说,除了基本类型以外的所有类型都是引用数据类型 主要包括类,接口,数组等如下图所示厂数值型整数类型(byte, short, int, long)(基本数据类型引用数据类型浮点类型(float, double)字符型(char)J布尔型(boolean广类(class)彳 接口 (interface)一数组()基本数据类型在内存中的分配基本型别大小最小值最大值booleanchar16-bitUnicode 0Unicode 2A16-1byte8-bit-128+127short16-bit-2T5+2T5-1int32-bit-2A31+2A31-1long64-bit-293+293-1float32-bitIEEE754IEEE754double64-bitIEEE754IEEE754注意!:表格里的人代表的是次方基本数据类型的转换有两种方式:自动转换和强制转换,通常发生在表达式中或方法的参数传递时。1 自动转换具体地讲,当一个较“小”数据与一个较“大”的数据一起运算时,系统将自动将“小”数据转换成 “大”数据,再进行运算。而在方法调用时,实际参数较“小”,而被调用的方法的形式参数数据又 较“大”时(若有匹配的,当然会直接调用匹配的方法),系统也将自动将“小”数据转换成“大”数 据,再进行方法的调用,自然,对于多个同名的重载方法,会转换成最“接近”的“大”数据并进行 调用。这些类型由“小”到“大”分别为(byte, short, char)-int-long-floatdouble。这里我们 所说的“大”与“小”,并不是指占用字节的多少,而是指表示值的范围的大小。例如byte b=10;int i=b;(将byte数据向int赋值时,完成了自动转换)char c=A;int i=c;(这时会将A对应的ASCII码值赋值给i)2 强制转换将“大”数据转换为“小”数据时,你可以使用强制类型转换 例如:int n=(int)1.23456;输出结果为 1可以想象,这种转换肯定可能会导致溢出或精度的下降。当字节类型变量参与运算,.java作自动数据运算类型的提升,将其转换为int类型。byte b=3;b=(byte)(b*3);必须声明 byte。带小数的变量默认为 double 类型 float f=1.3f;必须声明 f。基本数据类型的存储诸如int a = 3; long b = 255L;的形式来定义的,称为自动变量。值得注意的是:自动 变量存的是字面值,不是类的实例,即不是类的引用,这里并没有类的存在。如int a = 3; 这里的a是一个指向int类型的引用,指向3这个字面值。这些字面值的数据,由于大小可 知,生存期可知(这些字面值固定定义在某个程序块里面,程序块退出后,字段值就消失了), 出于追求速度的原因,就存在于栈中。另外,栈有一个很重要的特殊性,就是存在栈中的数据可以共享。 假设我们同时定义:int a = 3;int b=3; 编译器先处理 int a = 3;首先它会在栈中创建一个变量为 a 的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将 a指向3的地址。接着处理int b = 3 ;在创建完b这个引用变量后,由于在栈中已经有3这 个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。定义 完a与b的值后,再令a = 4;那么,b不会等于4,还是等于3。在编译器内部,遇到时, 它就会重新搜索栈中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有 了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。
展开阅读全文