Java的数据类型
⼀、数据类型
1、分类
Java中的数据类型分两⼤类分别是基本类型和引⽤数据类型。
注意:字符串不属于基本数据类型,属于引⽤数据类型;字符属于基本数据类型。
2、基本数据类型的字节数及表⽰范围
(1)整型变量默认为 int 类型
byte a =100;
short s =1000;
int a =100000;
long a =100000L;// 错误写法:long a = 100000;
因为整型变量默认为 int 类型,所以上述代码中的 100,1000,100000 都默认是 int 型,int 型会隐含强制转换为低级别的 byte 和 short,但只能显式强制转换为 long 型,所以必须写为 long a = 100000L; 或者 long a = (long)100000;
(2)浮点数的默认类型为 double 类型
float f1 =234.5f;
double d1 =123.4;
3、基本数据类型对应的包装类
出现原因:
Java 是⾯向对象的语⾔,但是为了便于开发者的使⽤,Java 中却沿⽤了 C 语⾔的基本数据类型,在进⾏基本的数据计算时,开发者可以直接使⽤基础类。但是基本数据类型是不具备对象的特征的,不能调⽤⽅法,⽽且基本数据类型不能存⼊集合中,所以就需要将基础数据类型实例封装为 Java 对象,使其具有了对象的属性和⽅法。⽽且原始类型不能为 null,但包装类可以 为null。包装类也可⽤于实现多态性。
(1)基本类型与包装类的区别
①存储位置不同:
基本数据类型直接将值放在栈中;
包装类型是把对象放在堆中,然后通过对象的引⽤来调⽤他们 ;
②初始值不同:
int的初始值为 0 、 boolean的初始值为false ;
包装类型的初始值为null ;
③使⽤⽅式不同:
基本数据类型直接赋值使⽤就好;
在集合如 coolectionMap 中只能使⽤包装类型;
(2)基本类型与包装类的相互转换
① ⼿动转换
● 基本数据类型 → 包装类:
通过对应包装类的构造⽅法实现,除了Character外,其他包装类都可以传⼊⼀个字符串参数构建包装类对象。
● 包装类 → 基本数据类型
通过包装类的实例⽅法 xxxValue() 实现; // xxx表⽰包装类对应的基本数据类型
② ⾃动装箱&⾃动拆箱(jdk1.5以后)
● 基本类型添加到集合中时,进⾏⾃动装箱
● 包装类型在涉及到运算的时候,“加,减,乘,除” 以及 “⽐较 equals,compareTo”,进⾏⾃动拆箱
4、数据在内存中的存储位置
(1)static final 修饰的常量
存放在常量池中,JDK1.8以前在⽅法区,JDK1.8及以后在堆中。
(2)⽅法中声明的局部变量
在⽅法中声明的变量,即该变量是局部变量,每当程序调⽤⽅法时,系统都会为该⽅法建⽴⼀个⽅法栈,其所在⽅法中声明的变量就放在⽅法栈中,当⽅法结束系统会释放⽅法栈,其对应在该⽅法中声明的变量随着栈的销毁⽽结束。
① 当声明的是基本类型的变量时,其变量名及值(变量名及值是两个概念)是放在⽅法栈中;
② 当声明的是引⽤变量时,所声明的变量(该变量实际上是在⽅法中存储的是内存地址值)是放在⽅法的栈中,该变量所指向的对象是放在堆内存
中。
(3)类中声明的成员变量
● 在类中声明的没有⽤ static 修饰的变量是成员变量,也叫全局变量,放在堆中的(因为全局变量不会随着某个⽅法执⾏结束⽽销毁)。
① 当声明的是基本类型的变量时,其变量名及其值放在堆内存中的
② 当声明的是引⽤类型时,其声明的变量仍然会存储⼀个内存地址值,该内存地址值指向所引⽤的对象,引⽤变量名和对应的对象仍然存储在相应
的堆中。
● 类中的成员变量⽤ static 修饰是静态成员变量,存储在⽅法区。
⼆、常数
1、⼗六进制
⼗六进制表⽰必须以 0x 或 0X 开头,如0xff、0X9A。
2、⼋进制
⼋进制表⽰必须以 0 开头,如0123、034。
3、⼗进制
(1)整数
在java中,整数常量默认是 int 类型
① long 类型
● 若数值没有超出 int 范围,可以直接赋值给 long 类型,发⽣⾃动向上转换( int —> long)。
long num =123;// ok,注意123默认是int类型,发⽣⾃动转换
●若数值超出 int 范围但没有超出 long 范围,赋值给long类型必须⽤ L 或 l 修饰,不会发⽣⾃动转换。
long num =99999999999999;//  error,99999999999999默认是int类型,超出了int类型,所以还没赋值就出错了
long num =99999999999999L;//  ok,99999999999999L被L修饰,不能默认是int类型,已经是long类型,可以直接赋值
② byte、short 和 char 类型( int —> byte、short 和、char 需要向下转换 )
● 若数值没有超出 byte、short 和 char 类型的范围,可以直接赋值给该类型。
byte d =135;//  error
byte d =3+5;//  ok
byte d = a +b ;//  error,a 和 b 都是变量。编译器在编译期间⽆法得知变量相加的值
●若数值超出byte、short 和 char 类型范围,赋值给该类型必须强制转换。
byte d =135;//  error
byte d =(byte)135;//  ok
我们⼀般向下转型的时候,会产⽣丢失进度的问题。但是当我们使⽤的整形常量位于 -128~127 不超过 byte 类型范围时,将其赋值给 byte 类型变量是不错产⽣这样的错误的。
(2)浮点数
浮点数常量的默认类型是 double 型
① double 类型
浮点数常量的默认类型是 double 型,因此可以直接赋值。
double num =1.23;// ok
② float 类型
浮点数赋值给 float 类型的变量必须要⽤ F(f) 修饰,或者强制类型转换。
float num =1.23F;// ok,1.23F 被F修饰,不能默认是double类型,已经是float类型,可以直接赋值,不发⽣向下转换
float num =(float)1.23;// ok
(3)字符类型
Java 的字符型常量值是⽤单引号引起来的⼀个字符,如 ‘e’、E’。
注:双引号⽤来表⽰字符串,像 “11”、“d” 等都是表⽰单个字符的字符串。
Java 还允许使⽤⼀种特殊形式的字符常量值来表⽰⼀些难以⽤⼀般字符表⽰的字符,这种特殊形式的字符是以 ‘\’
开头的字符序列,称为转义字符。
(4)布尔类型
Java 的布尔型常量只有两个值,即 false(假)和 true(真)。
注:在Java中,不能⽤ 0 代表 false(假),⾮零代表 true(真)。
三、数据类型之间的转换
在Java中,整型、实型和字符型被视为简单数据类型,这些类型由低级到⾼级分别为(byte、short、char)—> int —> long —> folat —> double。简单数据类型之间的转换⼜可以分为:低级到⾼级的⾃动类型转换、⾼级到低级的强制类型转换、包装类过渡类型转换,通常发⽣在表达式中或⽅法的参数传递时。
1、⾃动类型转换(运算、传参)
(1)当⼀个较低级数据与⼀个较⾼级的数据⼀起运算时,系统将⾃动将低级数据转换成⾼级数据,再进⾏运算。
(2)在⽅法调⽤时,低级实参赋值给⾼级形参时系统将⾃动将低级数据转换成⾼级数据,再进⾏⽅法的调⽤。对于多个同名的重载⽅法,会转换成最"接近"的⾼级数据并进⾏调⽤。
byte b;
int i=b;long l=b;float f=b;double d=b;
(1)如果低级类型为char型,向⾼级类型(整型)转换时,会转换为对应ASCII码值。
char c='c';
int i=c;
System.out.println("output:"+i);//输出:output:99;
(2)对于 byte、short 和 char 三种类型⽽⾔,他们是平级的,因此不能相互⾃动转换,可以使⽤强制类型转换。
byte i=99;
short s=(short)i;
char c=(char)i;
2、强制类型转换
将⾼级变量转换为低级变量时,需要⽤到强制类型转换,这种转换可能导致溢出或精度的下降。
3、隐含强制类型转换(初始化)java变量的数据类型分为两种
(1)在变量的初始化时,整数的默认类型是 int。byte b = 123; 123 默认是 int 类型,他会隐含强制转换为低级别的 byte 和 short 类型,所以不⽤显⽰强制转换;但是 int 类型只能显式强制转换为 long 型,
所以 long a = 123L;
(2)浮点型不存在这种情况,因为在定义 float 类型时必须在数字后⾯跟上 F 或者 f。
4、包装类型与基本类型的转换
(1)使⽤包装类的构造函数将基本类型的变量⼿动装箱为相应的包装类
Boolean(boolean value)、 Character(char value)、 Integer(int value)、 Long(long value)、 Float(float value)、
Double(double value)
如:
(2)使⽤的包装类静态⽅法 valueOf() 将基本类型的变量⼿动装箱为相应的包装类
Integer i = Integer.valueOf(1);// ⼿动装箱
注意:valueOf() 内部是⽤的 new ⽅法来构造对象的。
(3)调⽤包装类中 ××Value() 的实例⽅法将包装类型⼿动拆箱为任意类型的简单类型数据

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。