定义
Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。
分类
Java基本数据类型图
- java的整型常量默认为 int 型,声明long型常量须后加 ‘l’ 或 ‘L’。
- Java 的浮点型常量默认为double型,声明float型常量,须后加 ‘f’ 或 ‘F’。
class VariableTest {
public static void main(String[] args) {
//1.编码情况1:
long l = 123213;
System.out.println(l);
//编译失败:过大的整数
//long l1 = 21332423235234123;
long l1 = 21332423235234123L;
//编译失败
//float f1 = 12.3;
float f1 = (float)12.3;
//2.编码情况2:
//整型常量,默认类型为int型
//浮点型常量,默认类型为double型
byte b = 12;
//byte b1 = b + 1;//编译失败
//float f1 = b + 12.3;//编译失败
}
}
-
char 型数据用来表示通常意义上“字符”(2字节)。 Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。字符型变量的三种表现形式:
-
字符常量是用单引号(‘ ’)括起来的单个字符。
例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
-
Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。
例如:char c3 = ‘\n’; -
直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。
例如:\u000a 表示 \n。
-
char类型是可以进行运算的。因为它都对应有Unicode码。
-
转义字符表
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符’\’ | 092 |
\’ | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\? | 代表一个问号 | 063 |
\0 | 空字符(NUL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 十六进制所代表的任意字符 | 十六进制 |
在Java中,不管是String.split(),还是正则表达式,有一些特殊字符需要转义,这些字符是
( [ { / ^ - $ ¦ } ] ) ? * + .
转义方法为字符前面加上"\",这样在split、replaceAll时就不会报错。不过要注意,String.contains()方法不需要转义。
基本数据类型转换
1、自动类型转换
-
定义
- 在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。
-
转换规则
- 数值型数据的转换:byte→short→int→long→float→double。
字符型转换为整型:char→int。
- 数值型数据的转换:byte→short→int→long→float→double。
-
转换条件
- 自动类型转换的实现需要同时满足两个条件:①两种数据类型彼此兼容,②目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)。例如 byte 类型向 short 类型转换时,由于 short 类型的取值范围较大,会自动将 byte 转换为 short 类型。
-
注意
- 当byte,char,short三种类型的变量做运算时,结果为int型。(这三种类型的范围比较小)
2、强制类型转换
- 定义
- 当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。
- 语法格式
- 目标类型 变量名 = (目标类型) (被转换的数据);
举例:byte b = (byte)(a + b);
- 目标类型 变量名 = (目标类型) (被转换的数据);
- 注意
- 如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同。
- 不建议强制转换,因为会有精度的损失。
- boolean 类型不能转换为其它数据类型。
/*
强制类型转换:自动类型提升运算的逆运算。
1.需要使用强转符:()
2.注意点:强制类型转换,可能导致精度损失。
*/
class VariableTest3 {
public static void main(String[] args) {
double d1 = 12.9;
//精度损失举例1
int i1 = (int)d1;//截断操作
System.out.println(i1);//12
//没有精度损失
long l1 = 123;
short s2 = (short)l1;
//精度损失举例2
int i2 = 128;
byte b = (byte)i2;
System.out.println(b);//-128
}
}
包装类
定义
针对八种基本数据类型定义相应的引用类型。
使用
装箱:基本数据类型包装成包装类的实例。
拆箱:获得包装类对象中包装的基本类型变量。
JDK1.5之后支持自动装箱、自动拆箱。但类型必须匹配。