在程序编写中,创建一个变量就意味着在内存中开辟一定的空间用来存储数据。基于不同 类型的变量,JVM将自动申请内存空间并决定你可以将那些值存储到内存空间里面。因此,通过为变量指定不同的数据类型,我们就可以将整数、小数或者是字符存储到变量中了。
Java中有两种数据类型:原始数据类型(Primitive)和引用/对象数据类型(Reference/Object)。
一、原始数据类型
Java语言支持八种原始数据类型,使用Java关键字命名。每种类型的最大值最小值可以通过类型的MAX_VALUE和MIN_VALUE方法获取,如Byte.MIN_VALUE;
原始数据类型 | 长度 | 最小值 | 最大值 | 默认值 | 示例 |
---|---|---|---|---|---|
byte | 8bit | -128 | 127 | 0 | byte val=100 |
short | 16bit | -2^15 | 2^15-1 | 0 | short s = 10000 |
int | 32bit | -2^31 | 2^31 | 0 | int a = 100000, |
long | 64bit | -2^42 | 2^64 | 0 | long a = 100000L |
float | 32bit | 1.4E-45 | 3.4028235E38 | 0.0f | float f1 = 234.5f; |
double | 64bit | 4.9E-324 | 1.7976931348623157E308 | 0.0d | double d1 = 123.4 |
boolean | 1bit | false | boolean one = true | ||
char | 16bit | char letterA = 'A' |
二 引用数据类型
Java中除了8中基本数据类型以外,其他的数据类型统称为引用类型(reference Type),具体包括:类、接口、数组、枚举和注释类型。引用类型数据以对象的形式存在。引用类型变量的值是某个对象的句柄,而不是对象本身。声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个具体的对象。为引用数据类型赋值,需使用new关键字。任何引用变量的默认值都是null,任何引用变量都能够指向声明为同类型或兼容数据类型的对象。所有的引用类型都继承自Object类。
三 数据类型的转换
1、高精度向低精度转换,会精度丢失;
2、如果一个对象与另一个对象没有任何的继承关系,那么他们就不能进行类型转换。如果要把一个派生类对象赋值给基类对象这个称为上溯造型。如果要把基类对象赋值给派生类对象就需要强制类型转换,这称为下溯造型,下溯造型有一些危险,要安全的进行下溯造型有一个前题,基类对象必须是从派生类对象中上溯过来的。
例如:
class Base{}
class Child extends Base{
public static void main(String[] args){
Base base=new Child();//上溯造型
Child child=(Child)base;//下溯造型
Child child1=(Child)new Base();//抛出ClassCastException异常
}
}
3、String与引用类型的转换。前面已经说过,所有的对象都是从Object继承过来的,Object中有一个toString方法。这个方法是所有的对象都可以转换成String,如果想把自定义的类转换成String,最安全的做法是重写toString方法。和基本类型一样如果对象前有String对象用+连接,对象就会隐式转换成String,这种情况实际上是隐式调用了toString方法。