一、为什么有数据类型
我们都知道,变量其实就是内存中的一小块区域。我们定义一个变量,其实就是开辟了一个内存空间。如果没有数据类型,那么我们需要开辟多大的内存空间合适呢?为了解决这种问题,java就给我们提供了不同的数据类型,那么针对不同的数据类型,在内存中分配了不同大小的内存空间。
二、Java中数据类型的分类
- 基本数据类型
- 引用数据类型
基本数据类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
基本数据类型的详细讲解
数值型
整数型 字节数 范围
byte 1(8bit) -128 ~ 127
short 2(16bit) -2^15 ~ 2^15 - 1
int 4(32bit) -2^31 ~ 2^31 - 1
long 8(64bit) -2^63 ~ 2^63 - 1
浮点数
float 4(32bit) -3.403*10^38 ~ 3.403*10^38
double 8(64bit) -1.798*10^308 ~ 1.798*10^308
字符型
char 2(16bit) 0 ~ 2^16 - 1 = 65535
布尔型
boolean 1
整数默认是int类型的 , 浮点数默认是 double类型的
class Test
{
public static void main(String[] args)
{
byte a=1;
short b=2;
int c= 3
long d=1L;
float f=1.0F;
double t=3.14;
char e='A';
boolean one = true;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
System.out.println("f="+f);
System.out.println("t="+t);
System.out.println("e="e);
System.out.println("one="+one);
}
}
/*a=1
b=2
c=3
d=1
f=1.0
t=3.14
e=A
one=true
*/
基本数据类型转换
在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为(byte,short,char)–int–long–float–double
byte,short,char之间不转换,他们参与运算首先转换为int类型
隐式转换
隐式转换即指在数据的运算过程中无需开发人员额外操作,系统可自行做出的操作,这种操作都是数据从低精度转换到高精度的转换
代码如下:
//byte类型转为int类型
public static void main(String[] args)
{
byte a = 3;
int i=a;
System.out.println("i="+i);
}
//i=3
/*
byte,short,char三种数据类型为平级,不能被系统自动转换,三种数据类型中
char数据类型转换为高级类型,如int类型时,会转换为对应ASCII码值
*/
char类型转为int类型
{
char a = 'A';
int i=a;
System.out.println("i="+i);
}
//i=65
//int类型转为long类型
{
int a = 3;
long i=a;
System.out.println("i="+i);
}
//i=3
//long类型转为float类型
{
long a = 3;
float i=a;
System.out.println("i="+i);
}
i=3.0
//float类型转为double类型
{
float a = 3;
double i=a;
System.out.println("i="+i);
}
//i=3.0
强制转换
从高级数据类型到低级数据类型的转换。
强制转换的格式为:目标数据类型 变量名=(目标数据类型)(被转换的数据)
示例代码:
public static void main(String[] args)
{
long a = 100;
int i=(int)a;
System.out.println("i="+i);
}
//i=100
注意事项
尽量不要使用强制类型转化,因为可能存在损失精度的问题
示例代码:
{
int a = 128;
byte i=(byte)a;
System.out.println("i="+i);
}
//i=-128
强制类型转换代码示例:
示例代码:
高级类型向低级类型转换
int i=99;
byte b=(byte)i;
char c=(char)i;
float f=(float)i;
double d = (double)f;
平级转换
short i=99;
char c=(char)i;
引用数据类型
引用数据类型有类,接口,数组,以及对象。
在java里面除去基本数据类型的其他类型都是引用类型,自己定义的class类都是引用类型,可以像基本类型一样使用。
常见的引用类型有:String、StringBuffer、ArrayList、HashSet、HashMap等。
引用数据类型转换
基本类型 与 对应包装类 可自动转换,这是自动装箱和折箱的原理;
两个引用类型间转换:
子类能直接转换为父类 或 接口类型;
父类转换为子类要 强制类型转换;且在运行时若实际不是对应的对象,会抛出ClassCastException运行时异常;
基本数据类型与引用数据类型的区别
基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的。