java里数据类型分为两种,基本数据类型和引用数据类型。
1.基本数据类型
整形:byte (1个字节)short(2个字节) int (4个字节)long(8个字节)
浮点型:float(4个字节) double(8个字节)
字符型: char(2个字节)
布尔型: boolean(1个字节)
2.引用数据类型
类(class)
接口(interface)
数组(array)
基本数据类型整形的存储空间以及取值范围如下,分别为byte,short,int和long
占用存储空间 | 取值范围 |
1字节 = 8比特 | -128~127 |
2字节 | -2~15 ~ 2~15-1 |
4字节 | -2~31 ~ 2~31-1(约21亿) |
8字节 | -2~63 ~ 2~63-1 |
注意:
1)java的整形常量默认为int类型,声明long类型的常量或者变量需要在值面加上“l”或者“L”
2)bit是计算机中最小的存储单位,byte是计算机中最基本的存储单元
基本数据类型浮点型的存储空间以及取值范围如下,分别为float(单精度)尾数可以精确到7位有效数字,double(双精度)精确度为float的两倍
占用存储空间 | 取值范围 |
4字节 | -3.403E38 ~ 3.403E38 |
8字节 | -1.798E308 ~ 1.798E308 |
注意:
1)java的浮点型常量默认为double类型,在声明float类型的常量或者变量时要在后面加上f或者F
3.code
package com.yl.pdfdemo.day01;
/**
* @Author wfj
* @Date 2021/1/3
* @Description 基本数据类型
* @Version 1.0
*/
public class VariableTest1 {
public static void main(String[] args) {
//1.整形,byte(1个字节) short(2个字节) int(4个字节) long(8个字节)
// byte范围-128 ~ 127,如果超出了这个范围,编译不会通过
byte a = -1;
byte b = 127;
//byte c = 128; 编译不会通过
System.out.println(a);
System.out.println(b);
short d = 789;
int e = 123;
//声明long类型的变量时,必须在后面加L或者l
long f = 123456789L;
System.out.println(d);
System.out.println(e);
System.out.println(f);
//2.浮点型
// float(4个字节)但它的取值范围比long的还要大
//定义float类型的变量时,值后面要加上f或者F,如果不加,编译不会通过
double g = 122.88;
float h = 89.67F;
System.out.println(g);
System.out.println(h);
//3.字符型: char(1字符=2字节)
//定义一个char类型的变量,内部只能写一个字符
char c1 = 'a';
// char c2 = 'ab';编译不会通过
//表示方式
//1.声明一个字符 2.转义字符 3.直接使用unicode值来表示字符型常量
char c3 = '\n'; // \n代表换行
char c4 = '\t'; // \t代表制表符号Tab键
System.out.print("hello" + c3);
System.out.println("world");
char c5 = '\u0043';
System.out.println(c5);
//4.布尔类型: boolean
//只能取两个值,true或者false
boolean b1 = true;
System.out.println(b1);
}
}
4.类型转换问题
1)自动类型转换
package com.yl.pdfdemo.day01;
/**
* @Author wfj
* @Date 2021/1/3
* @Description 基本数据类型之间的运算规则
* @Version 1.0
*/
public class VariableTest2 {
public static void main(String[] args) {
/*
这里只讨论7种基本数据类型变量之间的运算,不包含boolean类型
1、自动类型转换
结论: 当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果会是自动提升到容量大的数据类型
byte 、char 、short --》 int --》 long --》 float --> double
特别的: 当byte、char和short三种类型的变量做运算时,结果会为int类型
2.强制类型转换
*/
byte a = 12;
int b = 57;
// byte c = a + b;编译不会通过
int c = a + b;
long d = a + b;
System.out.println(c);
System.out.println(d);
float e = a + b;
System.out.println(e);
short g = 13;
double h = g;
System.out.println(h);
char i = 'a';
int j = 17;
int l = i + j;
System.out.println(l);
short m = 179;
// char n = m + i;编译不会通过
byte o = 77;
// char p = i + o;编译不会通过
// short r = m + i;编译不会通过
// short s = m + o;编译不会通过
}
}
2)强制类型转换
package com.yl.pdfdemo.day01;
/**
* @Author wfj
* @Date 2021/1/9
* @Description 强制类型转换问题
* @Version 1.0
*/
public class VariableTest3 {
public static void main(String[] args) {
/**
* 强制类型转换: 自动类型提升运算的逆运算
* 1.使用强制符,()
* 2.注意点:强制类型转换,可能导致精度丢失
*/
// 精度丢失
double d1 = 12.9;
// 截断操作, 会显示12
int i1 = (int)d1;
System.out.println(i1);
// 不会丢失
long l1 = 123L;
short s1 = (short)l1;
System.out.println(s1);
// 精度丢失
int i2 = 128;
byte b = (byte)i2;
System.out.println(b); // -128
// 编译情况1
long l2 = 123456;
System.out.println(l2);
//编译失败,过大的整数
// long l3 = 12345678976542;
long l4 = 12345678976542L;
System.out.println(l4);
//**********************
//整数常量,默认类型为int
//浮点数常量,默认类型为double
//**********************
//编译失败
//float f1 = 12.3;
float f2 = (float)12.3;
System.out.println(f2);
byte b1 = 12;
//编译失败,b1为byte类型,1为int类型,相加应该用int来接受
// byte b2 = b1 + 1;
// 编译失败
// float f3 = b1 + 12.3;
}
}