数据类型-java
基本数据类型
- 内置数据类型
- 引用数据类型
- Java常量
- 自动类型转换
- 自动类型转换
- 强制类型转换
- 隐含强制转换类型
变量就是申请内存来存储值。创建变量的时候,需要在内从中有足够的空间。
内存管理系统根据变量类型为变量分配存储空间,分配的空间只用用来存储该类型的数据
两大数据类型
- 内置数据类型
- 引用数据类型
内置数据类型
也就是基本数据类型
java语言提供了八种基本类型。其中 6种 数字类型(4个整型,2个浮点型),一种字符类型,一种布尔类型
byte | 有符号的,以二进制补码表示的整数 |
---|---|
二进制位数 | 8 |
包装类 | java.lang.Byte |
最小值 | Byte.MIN_VALUE=-128(-27) |
最大值 | Byte.MAX_VALUE=127(27-1) |
默认值 | 0 |
说明 | byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一; |
示例 | byte a = 100, byte b = -50; |
short | 有符号的,以二进制补码表示的整数 |
---|---|
二进制位数 | 16 |
包装类 | java.lang.Short |
最小值 | Short.MIN_VALUE=-32768(-215) |
最大值 | Short.MAX_VALUE=32767(215-1) |
默认值 | 0 |
说明 | Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一; |
示例 | short s = 1000,short r = -20000; |
int | 有符号的,以二进制补码表示的整数 |
---|---|
二进制位数 | 32 |
包装类 | java.lang.Integer |
最小值 | Integer.MIN_VALUE=-2147483648(-231) |
最大值 | Integer.MAX_VALUE=2147483647(231-1) |
默认值 | 0 |
说明 | 一般地整型变量默认为 int 类型; |
示例 | int a = 100000,int b =-200000 |
long | 有符号的,以二进制补码表示的整数 |
---|---|
二进制位数 | 64 |
包装类 | java.lang.Long |
最小值 | Long.MIN_VALUE=-9223372036845775808(-263) |
最大值 | Long.MAX_VALUE=9223372036845775807(263-1) |
默认值 | 0L |
说明 | 这种类型主要使用在需要比较大整数的系统上; |
示例 | long a = 100000L,long b = -200000l; |
float | 单精度、符合IEEE 754标准的浮点数 |
---|---|
二进制位数 | 32 |
包装类 | java.lang.Float |
最小值 | Float.MIN_VALUE=1.4E-45 |
最大值 | Float.MAX_VALUE=3.4028235E38 |
默认值 | 0.0F |
说明 | 浮点数不能用来表示精确的值; |
示例 | float f1 = 234.5f; |
double | 双精度、符合IEEE 754标准的浮点数; |
---|---|
二进制位数 | 64 |
包装类 | java.lang.Double |
最小值 | Double.MIN_VALUE=4.9E-3241 |
最大值 | Double.MAX_VALUE=1.7976931348623157E308 |
默认值 | 0.0D |
说明 | double类型同样不能表示精确的值; |
示例 | double d1 = 123.4d; |
char | 单一的16位Unicode字符 |
---|---|
二进制位数 | 16 |
包装类 | java.lang.Character |
最小值 | Character.MIN_VALUE=0(\u0000) |
最大值 | Character.MAX_VALUE=65535(\uffff) |
默认值 | 0 |
说明 | 可以储存任何字符,注意用单引号,只能存储2个字节; |
示例 | char letter = 'A'; |
boolean | 表示1位的信息,即0或1 |
---|---|
二进制位数 | 1 |
值 | true 或 false |
默认值 | false |
说明 | 只用来记录true/false情况; |
示例 | boolean a = true; |
实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。
引用数据类型
-
Java 声明中引用类型的变量非常类似于C/C++中的指针。引用类型指向一个对象,指向对象的变量就是引用变量。这些变量在声明时,被指定为一个特殊的类型,比如Baby。变量一旦声明后就不能被改变了。
-
对象、数组都是引用数据类型
-
所有引用类型的默认值都是null
-
一个引用变量可以用来引用任何与之兼容的类型
Java常量
常量在程序运行时是不能被修改的,用关键字fianl来修饰常量
final double PI = 3.1415926;
一般用大写来表示常量。
字面量可以赋给任何内置类型的变量
byte a = 68;
char a ='a';
byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。
当使用常量的时候,前缀 0 表示 8 进制,而前缀 0x 代表 16 进制, 例如:
int d = 100; int octal = 0144; int hexa = 0x64;
Java字符串常量也是包含在两个引号之间的字符序列
"hell world" "two/nlines" "\"this is in quotes\""
字符串常量和字符常量都可以包含任何Unicode字符
char a = '\u0001'
Stirng a = "\u0001"
Java语言支持一些特殊的转义字符序列
符号 | 含义 |
---|---|
\n |
换行(0x0a) |
\r |
回车(0x0d) |
\f |
换页符(0x0c) |
\b |
退格(0x08) |
\0 |
空字符(0x20) |
\s |
字符串 |
\t |
制表符 |
\" |
双引号 |
\' |
单引号 |
\\ |
反斜杠 |
\ddd |
八进制字符(ddd) |
\uxxxx |
16进制Unicode字符(xxxx) |
自动类型转换
整型、实型(常量)、字符型数据可以混合运算,不同类型的数据先转换为同一类型然后进行计算
转换从低级到高级
低--------------------------------------高
byte,short,char-> int->long->float->double
-
数据类型转换必须满足以下条件:
- 不能对boolean类型进行转换
- 不能把对象类型转换为不相关类的对象
- 在把容量打的类型转换为容量小的类型时必须使用强制类型转换
- 转换过程中可能导致溢出或者损失精度,例如:
int i = 128; byte b = (byte)i;
因为byte是8位,最大值为127,所以当int强制转换为byte类型时,值128时候就会导致溢出。 - 浮点数到整数的转换通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23; (int)-45.89f == -45;
自动类型转换
必须满足转换前的数据类型的位数要低于转换后的数据类型,如:16位short转为32位int
示例
public class AutoTransfrom{
public static void main(String[] args) {
char c1 = 'a';
int i1 = c1;
System.out.println("char自动转换后int为"+i1);
char c2 = 'A';
int i2 = c2+1//char类型和int 的计算
System.out.println("计算后结果为"+i2);
}
}
强制类型转换
- 条件时转换的数据类型必须是兼容的
- 格式
(type)value
type是要强制类型转换后的数据类型
示例
public class qiangzhi{
public static void main(String[] args) {
int i1 = 123;
byte b = (byte)i1;
System.out.println("强制转换后的结果是"+b);
}
}
隐含强制转换类型
- 整数类型默认是int
- 浮点型不存在这种情况,因为在定义float类型时必须在数字后跟上F或f。
-
Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的”E+数字”表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314。 ↩