因为Java是强类型(strongly typed)语言,称之为强类型语言,就说明Java的变量必须先声明后使用,而且一种数据类型的变量只能赋同一种类型的值(多态是一种例外),这样的好处是Java程序编译的时候可以严格的检查,减少编程的错误。
其实,数据类型就是规定好的内存里一定大小的一种存储方式(个人理解,也许不正确),每一种数据类型有不同的存储方式,这样也就可以根据数据的大小与特点,找合适的内存存放。
说回正题,Java数据类型大的方面可以分成两类:基本数据类型与引用数据类型。
基本数据类型包括四类八种:
整型数据,就是常说的自然数,1 2 3 4 5 6 7 8 9 -1 -2........这样的,里面有分为四种:byte、short、int、long,只要的区别是取值范围的不同,这样也是为了节省空间的考虑。
byte在内存里占据8位,可以存放-128--127之间,即之间的数
short在内存中占据16位,可以存放之间的数
int在内存中占据32位,可以存放之间的数,直接给出一个整数,系统默认是int类型
long在内存中占据64位,可以存放之间的数,注意的一点,long型数据再后面要加(L或者l),不然系统会当成int类型处理
/*
* 下面一行代码编译会报错:int类型的文字超出范围
* 因为系统当成了int类型处理
*/
long num = 9876543210;
//下面一行代码执行正确
long num = 9876543210L;
/*
* 下面一行代码也是执行正确,但是不推荐
* 因为英文字母l与1太像,容易看错
*/
long num = 9876543210l;
字符型 char ,字符型通常表示一个单个的字符,需要用 ' ' 单引号括起来,像'A'、'a'、'9'这些,但是注意'9'和数字9是不一样的,还有一种特殊的字符型称为转义字符,例如'\t'代表制表符,'\n'代表换行符等,还有可以用Unicode码值,像'\uXXXX',XXXX代表十六位的整数,至于Unicode编码集,是一些字符的编号汇总,这个可以了解一下。
浮点型,就是通俗说的字符串类型,有两种:float与double。
double表示双精度浮点型,占64位,默认的一个浮点数系统会当成double处理
float表示单精度浮点型,占32位 ,float类型有点类似于long,赋值是要跟上F或者f才有效,否则会当成doube类型处理。
如果一个浮点型数据和整形数据做除法,会把整型数变成浮点型,例如15.5/2会转换成15.5/2.0
布尔型(boolean),只有两个取值,true和false,表示真假。
类型转换:
基本数据类型之间的转换分两种:自动类型转换和强制类型转换。
自动类型转换,很明了,就是不需要程序要显示的进行转换,系统会自动完成,如下图:
从左向右是可以自动转换的,而反向是不正确的:
//下面的代码是正确的
byte b = 123;
short s = b;
int i = s;
long l = i;
float f = l;
double d = f;
char c = 'a';
int i1 = c;
long l1 = i1;
float f1 = l1;
double d1 = f1;
//而下面的代码是错的
f1 = d1;
上述的代码 f1 = d1不能从 double 转换成 float,需要强制类型转换,强制类型转换就是说需要程序员显示的去转换,有一定的格式如下:
类型1 变量名 = (类型1)类型2变量值;
但是要注意,强制类型转换是不安全的,因为转换有可能不成功,最常见的一种就是范围超出:
//下面的代码b=-64,因为byte的范围是-127--128
int i = 1234;
byte b = (byte)i;
//下面的代码b=123
int i = 123;
byte b = (byte)i;
还有一个知识点是表达式类型的自动提升:其实上面已经提到过了,例如下面的代码:
int i = 20;
double d = 15.5;
double x = d/i;
int y = d/i; //这一行代码编译会报错
因为int类型的i已经自动转换成了double类型,其实表达式的类型自动提升和变量的自动类型转换思想是一致的,其实也就是系统对于不同类型自动转换成了同一类型进行计算。
引用数据类型与基本数据类型的差别是存放数据类型和存放方法的差别,分别叙述一下:
基本数据类型,变量声明在类里面,基本数据类型在堆区开辟空间,属于类空间的一部分,如果在方法里声明,会在方法栈开辟空间,而引用数据类型类似,只不过基本数据类型里面存放的是数据值,而引用数据类型存放的是一个引用类型的地址,如下:
大概是这样的,下面这一部分知识大概了解,后面的更新会系统、准确的总结一下基本数据类型与引用数据类型的内存存放方式。