javaSE 数据类型
基本类型
java共有八种基本类型:
- byte:byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一
- short:Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一
- int:默认的整型类型,存储整数(默认的整数类型)
- long:这种类型主要使用在需要比较大整数的系统上
- float:32位浮点数,不能用来表示货币这类精确的值
- double:64位浮点数,也不能用来表示货币这类精确的值(默认的小数类型)
- char:数据类型可以储存任何字符(不是字符串)
- boolean:只有两个取值:true 和 false
前四种是整型(装整数的),5、6是浮点型(小数)他们可以做数学运算
int a = 5;
double b = 5.2;
System.out.println(a+b);
控制台打印值
10.2
字符串的加法叫做字符串的拼接
这里其实也就是说明java输出可以通过 + 号来拼接字符串
不过不同的是char c = ‘a’ + ‘b’;是a和b的ASCII码相加得到新的字符
String e = "fghij";
String d = "abcde";
System.out.println(d+e);
控制台打印值
abcdefghijk
以下是八个类型的最大最小值,通过每个类的MIN_VALUE和MAX_VALUE方法拿到
public class Type {
public static void main(String[] args) {
// byte
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
System.out.println();
// short
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
System.out.println("包装类:java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
System.out.println();
// int
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类:java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
System.out.println();
// long
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
System.out.println("包装类:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
System.out.println();
// float
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
System.out.println("包装类:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
System.out.println();
// double
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
System.out.println("包装类:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
System.out.println();
// char
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
System.out.println("包装类:java.lang.Character");
// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE="
+ (int) Character.MIN_VALUE);
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
System.out.println("最大值:Character.MAX_VALUE="
+ (int) Character.MAX_VALUE);
}
}
以下是输出结果可以看到各种类型的最大值和最小值
引用型数据类型
个人理解就是类似结构体一样已经写好的数据类型,在这个地方要用,就把它引用过来
三种:类 接口 数组
如下就是类的引用类型
String d = "abcde";
类型转换
boolean型是不能转换的
自动转换
想象成容器,从小的容器倒入大的容器中(每个类型的二进制位数大小不同)
double > float > long > int > short > byte
这些数值型转换的最终结果有下面的情况
- 有double就一定是double型
- 如没有double有float是float型
- 如没有double和float有long是long型
- 如前面都没有就一定是int型
不过这个一般在有表达式的来判断,平时的转换自己想转成什么的肯定知道嘛
//顺序错了编译器就会自动报错
double a;
float b;
long c;
int d;
short e;
byte f = 2;
e = f; // byte型自动转为short型
d = e; // short型自动转为int 型
c = d; // int 型自动转为long 型
b = c; // long 型自动转为float 型
a = b; // float 型自动转为double 型
System.out.println(a);//最后会输出: 2.0
不需要一级一级的转这样写只是方便体现规律,也就是可以直接从小范围转到任意大范围的
double a;
float b;
long c;
int d;
short e;
byte f = 2;
a = f;//由byte型自动转换为double型
System.out.println(a);//输出的结果还是: 2.0
对于char型当字符是数字时可以和int、long、float、double进行转换
double a;
float b;
long c;
int d;
char e = 2 ;
d = e; // char型自动转为int 型
c = d; // int 型自动转为long 型
b = c; // long 型自动转为float 型
a = b; // float 型自动转为double 型
System.out.println(a);//最后会输出: 2.0
强制转换
如果违背了自动转换的范围大小规定就不能进行转换,但是还是任性一下也是可以的啦,加上强制转换,就可以强制转换成想要的类型,他的格式是这样的:
范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据
double a = 2;
float b;
long c;
int d;
short e;
byte f ;
b = (float)a; // 将double型的a强制转换为float型再赋值给b
c = (long)b; // 将b强制转换为long型再赋值给c
d = (int)c; // 将c强制转换为int型再赋值给d
e = (short)d; // 将d强制转换为short型再赋值给e
f = (byte)e; // 将e强制转换为byte型再赋值给f
System.out.println(f); //最后会输出: 2
同样它也不需要一级一级的转,可以一步到位
double a = 2;
float b;
long c;
int d;
short e;
byte f ;
f = (byte)a; // 将double型的a强制转换为byte型再赋值给f
System.out.println(f); //最后会输出: 2
不过要注意的是需要强制转换的数据范围也是不能超出需要转换到的类型的范围及格式:
范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据
里面数据的实际范围左边大于右边,否则会发生溢出