Java 中的数据类型有 基本数据类型 和 引用数据类型 两大类。
- 基本数据类型的大小确定,变量声明后即分配内存;引用数据类型的变量创建后,不会立即分配内存,但会保存一个内存地址
- 基本数据类型的变量名指向具体的数值;引用数据类型的变量名指向存数据对象的内存地址
- 基本数据类型存放在栈内存中,读写速度快;引用数据类型存放在堆内存中,但会在栈内存中存放一个地址,指向堆内存中的具体数据信息
- 基本数据类型之间是值的传递;引用数据类型之间是引用的传递
- 基本数据类型变量判断值是否相等用 “==” 或 “!=”;引用数据类型的变量判断值是否相等可以通过重写 equals() 方法,“==”或“!=”是判断引用是否相同
1. 基本数据类型
基本数据类型有 字节型(byte),短整型(short),整型(int),长整型(long),单精度浮点型(float),双精度浮点型(double),字符型(char),布尔型(boolean) 八种,具体数据信息如下图
2. 引用数据类型
除八大基本数据类型之外的都是引用数据类型,包括 String、类、接口、数组、集合……
最常用的引用数据类型应该就是 String (字符串)了,这是一种特殊的引用数据类型,经常被初学者误认为是基本数据类型,后面有时间我会专门整理一下关于它的内容
另外,针对八大基本数据类型,还有专门的包装类将基本数据类型封装成对象,如 Integer(int 的包装类)、Character(char 的包装类)、Byte(byte 的包装类)……其他的都是对应首字母大写
基本数据类型的包装类最主要的功能就是用于基本数据类型和 String 类型之间的转换,还有些基本数据类型不太方便的情况下,转换成包装类即可(比如有些方法传入的参数可能为空时,用基本数据类型可能会报错,用包装类就不会)
3. 数据类型转换
1)自动类型转换
如果操作两个兼容的不同类型的数据做计算,则结果(表达式)自动提升为较大的那个数据类型
不需要特殊操作,但有前提:
- 两种数据类型要兼容(通俗一点就是差不多的类型,比如 int 和 double,两者都为数字)
- 目标类型大于源类型(即由类型小的向类型大的转,比如 int 转成 double 可以,反之不行)
int a = 3; double b = 2.5; double c = a + b;
2)强制类型转换
将取值范围大的类型强制转换为取值范围小的类型,需要在被转换的数据前加上(要转成的类型)
这里的前提也是数据类型要兼容,和自动类型转换不同的是,强制是由大转小
int a = 3; double b = 2.5; int c = (int)(a + b); // 或者 int c = a + (int) b; 是一样的
3)基本数据类型和包装类之间的转换(自动装/拆箱)
装箱:基本数据类型转换成包装类(原理:调用包装类的 valueOf() 方法或直接 new 包装类)
拆箱:包装类转换成基本数据类型(原理:调用包装类的 xxxValue() 方法)
Integer a = 3; //自动装箱 int b = a; //自动拆箱
4)基本数据类型转 String(字符串)
- 基本数据类型 + 字符串 → 字符串
- String.valueOf(基本数据类型) → 字符串
- 包装类.valueOf(基本数据类型).toString() → 字符串
int i = 10; String a = "" + i; String b = String.valueOf(i); String c = Integer.valueOf(i).toString(); // valueOf()的参数类型可以为对应基本数据类型,也可以为字符串,返回值为包装类 // toString()是将包装类转换为 String 类型的方法
5)String(字符串) 转基本数据类型
- 包装类.parseXxx(字符串) → 基本数据类型(特例:Character 没有 parseCharacter() 方法)
- 包装类.valueOf(字符串) → 基本数据类型(转包装类后自动拆箱)
String str = "12"; int a = Integer.parseInt(str); int b = Integer.valueOf(str);
6)向上转型、向下转型
向上/下转型是针对引用数据类型而言的,将子类对象转换为父类对象是向上转型,反之是向下转型;向上转型类似于上面的自动类型转换,向下转型类似于上面的强制类型转换;因为和类的继承相关,这里就不做赘述了,后面讲到继承的时候再整理
7)注意:
- 强制类型转换一般不推荐,因为转换时不是四舍五入而是直接抹零,容易造成数据精度损失
- 当byte、char、short三种类型的变量互相做运算时,或者自己和自己本身做运算时,结果都为int型。
java 是一种强类型语言,所以定义变量时必须先确定该变量的数据类型。
1. 创建变量的语法
定义变量:变量类型 变量名;
给变量赋值:变量名 = 变量值;
创建变量的同时给变量赋值:变量类型 变量名 = 变量值;
// 只创建变量不赋值 String name; int a,b; // 给已有的变量赋值 name = "张三"; a = 10; b = 12; // 创建变量并赋值 double price = 22.5; // 注意:下面这种情况,只给 c 赋值了,a 和 b 都没有被赋值 int a,b,c = 10; // 这里等同于 int a;int b;int c=10; //同时定义多个同类型变量时,要各自赋值,下面则表示 a,b,c 这3个变量都为10; int a = 10,b = 10,c = 10;
2. 变量命名规则
- 由字母、下划线、美元符、人民币符号、数字中的一种或多种组成
- 不能以数字开头
- 不能使用关键字,如 public 、class 等
- 见名知义,最好使用小驼峰命名法
(小驼峰:当变量名由多个单词构成时,第一个单词全小写,后面的单词都首字母大写
大驼峰:当变量名由多个单词构成时,所有单词的首字母都大写,常用于类名)
3. 常量
常量定义:final + 变量定义(常量命名:全大写,组合词用下划线)
final double PI = 3.14; final double MAX_SCORE = 100;
ps:关于 final,单词意为最终的,在 java 中:
- final 变量 ==> 常量(不能变)
- final 方法 ==> 最终方法(不能被重写)
- final 类 ==> 最终类(不能被继承)



