Java的数据类型
一、数据类型
1.基本数据类型与引用数据类型:
基本数据类型(8个):
- 字节(1个): byte (1 byte = 8 bit , 可表示 -128 ~ +127 范围内的整数)
- 整型(4个): short(2 byte)、 int(4 byte)、 long(8 byte)
- 浮点型(2个):float(4 byte)、 double(8 byte)
- 字符型(1个):char(2 byte) --> Unicode编码
- 布尔型(1个):boolean(1 bit) --> true / false
引用数据类型:
除了基本数据类型之外的都是引用数据类型,比如:
- 字符串String
- 数组[]
- 类class
- 接口interface
- 枚举enum
- 注解 @interface
2.基本数据类型的取值范围
代码如下:
System.out.println("byte 取值范围:" + Byte.MIN_VALUE + " ~ "+ Byte.MAX_VALUE);
System.out.println("short 取值范围:" + Short.MIN_VALUE +" ~ "+ Short.MAX_VALUE);
System.out.println("int型 取值范围:" + Integer.MIN_VALUE +" ~ "+ Integer.MAX_VALUE);
System.out.println("long 取值范围:" + Long.MIN_VALUE +" ~ "+ Long.MAX_VALUE);
System.out.println("float 取值范围:" + Float.MIN_VALUE +" ~ "+ Float.MAX_VALUE);
System.out.printf ("float 取值范围:%f ~ %f\n",Float.MIN_VALUE,Float.MAX_VALUE);
System.out.println("double 取值范围:" + Double.MIN_VALUE +" ~ "+ Double.MAX_VALUE);
System.out.printf ("double 取值范围: %f ~ %h\n", Double.MIN_VALUE,Double.MAX_VALUE);
//十六进制格式输出
System.out.printf("char 取值范围:%h ~ %h\n",Character.MIN_VALUE,Character.MAX_VALUE);
System.out.printf("boolean 的取值:%b 和 %b\n",Boolean.TRUE,Boolean.FALSE);
运行结果如下:
3.数据的底层原理
1.JAVA中的 float 和 double:
问题:定义一个 flaot 型小数 ,会被报错。
解决:在所定义的float型数值后面加个字母 F。
原因:因为系统默认,浮点数为double型,系统将一个double型数值转化为我们自己定义的float型数值,由 8 byte --> 4 byte 会产生数据损失,因此报错。
2.JAVA中的 int 和 long:
问题:int型 共有 4x8=32 bit,
取值范围为 :-2147483648 ~ 2147483647
long型 64 bit,但当变量数值超过int型的取值范围时,依然会报错。
解决:在所定义的long类型数值后面加个字母 L。
原因:系统认为,int型的取值范围已经能够满足人们的日常需要,所以默认将long型变量的值存储为int型。 故当我们定义的long型变量的值超出int型的取值范围时,需要在其数值的末尾加上字母L,加以声明。
4.数据类型之间的转换
1.同种数据类型之间的转换:
1>.小空间变量内的数据可以直接转换为大空间变量。如:
int型数据可以直接转换为long型数据;
float型数据可以直接转换为double型数据。
2>.大空间变量内的数据转换到小空间变量内,会存在数据损失。
如:(附有解释说明)
2.整型与浮点型之间的转换:
例:long型数据转换为 浮点数float型 ,以及double型。
3.char与int之间的转换:
二、数组简介
1.一维数组
一维数组的默认值:
引用数据类型 ,默认值为 null。
数据类型 | 单个元素的默认值 |
---|---|
int[] | 是 0 |
float[]和 double[] | 是 0.0 |
boolean[] | 是 false |
String[] | 是 null |
- 注意:
数组之间直接赋值(用‘=’号)相等,两个数组使用的是同一地址空间。
2.二维数组 :
理解二维数组的本质
二维数组是以一维数组作为元素的数组。二维数组 int[2][3]内,包含 2个一维数组,每个一维数组的长度为3。
三、程序源码
public class DataType {
/**
* 基本数据类型(8个):
* 字节(1个): byte (1 byte = 8 bit , 可表示 -128 ~ +127 范围内的整数)
* 整型(4个): short(2 byte)、 int(4 byte)、 long(8 byte)
* 浮点型(2个):float(4 byte)、 double(8 byte)
* 字符型(1个):char(2 byte) --> Unicode编码
* 布尔型(1个):boolean(1 bit) --> true / false
*
* 引用数据类型:
* 数组[]、 类class、 接口interface、 枚举enum、 注解 @interface
*/
public static void main(String[] args) {
/**
* float 不加 F 会报错,
* 因为系统默认,浮点数为double型,
* 而系统将一个double型数值转化为我们自定义的float型数值,由 8 byte --> 4 byte 会产生数据损失
*/
float a = 3.4F;
double b = 3.4;
/**
* int型 共有 4✖8=32 bit,取值范围为 :-2147483648 ~ 2147483647
* 系统认为,int型的取值范围已经能够满足人们的日常需要,默认将long型变量的值存储为int型,
* 故当我们定义的long型变量的值超出int型的取值范围时,需要在其数值的末尾加上字母L,加以声明。
*/
int c = 2147483647;
long d = 2147483648L;
System.out.println("byte 取值范围:" + Byte.MIN_VALUE + " ~ "+ Byte.MAX_VALUE);
System.out.println("short 取值范围:" + Short.MIN_VALUE +" ~ "+ Short.MAX_VALUE);
System.out.println("int型 取值范围:" + Integer.MIN_VALUE +" ~ "+ Integer.MAX_VALUE);
System.out.println("long 取值范围:" + Long.MIN_VALUE +" ~ "+ Long.MAX_VALUE);
System.out.println("float 取值范围:" + Float.MIN_VALUE +" ~ "+ Float.MAX_VALUE);
System.out.printf ("float 取值范围:%f ~ %f\n",Float.MIN_VALUE,Float.MAX_VALUE);
System.out.println("double 取值范围:" + Double.MIN_VALUE +" ~ "+ Double.MAX_VALUE);
System.out.printf ("double 取值范围: %f ~ %h\n", Double.MIN_VALUE,Double.MAX_VALUE);
//十六进制格式输出
System.out.printf("char 取值范围:%h ~ %h\n",Character.MIN_VALUE,Character.MAX_VALUE);
System.out.printf("boolean 的取值:%b 和 %b\n",Boolean.TRUE,Boolean.FALSE);
/**
* int型 1234的二进制数为:100 1101 0010
* 而转化为 byte型时,只能存储后8位,即1101 0010,计算机存储的是 数据的补码,
* 由上述的 后8位数据可知,此数为负数,其真值为 -010 1110 = -46
*/
int h = 1234;
byte g = (byte)h;
System.out.println("\nint型 "+ h + " 转换为 byte型 的数值为:"+ g);
/**
* float型 和 double型 的表示范围均比 long型 的表示范围大,
* 但是 较大 或者 较小 的整数,在用 float进行表示时,会造成数值上的精度损失。
*/
long k = -1234567898765L;
float l = k;
double m = k;
System.out.println("long型 "+ k + " 转换为 float型 的数据值为:"+ l);
System.out.println("long型 "+ k + " 转换为 double型 的数据值为:"+ m);
/**
* char型 与 int型 之间的转换:
* 1.char型 转换为 int型,可直接转换。
* 2.int型 转换为 char型,需要强制转换,否则会被报错。
*/
char n = 'a';
// char n = '祎';
int i = n;
System.out.println("\nchar型 "+ n + " 转换为 int型 为:"+ i);
int p = 97;
// int p = 31054;
char r = (char) p;
System.out.println("int型 "+ p + " 强制转换为 char型 为:"+ r);
/**
* char int
* A 65
* a 97
* '0' 48
*/
char t = '0';
System.out.println("\n字符 '0' 的 int值 为:"+ (int)t );// 48
int z ='2';
System.out.println("int z ='2', 则 z = "+z); //50
char y = 65;
System.out.println("char y = 65, 则 y = "+y); //A
}
}
运行结果: