一、基本数据类型:8种
整数类型:int(4字节)、long(8)、short(2)、byte(1) 浮点类型:double(8)、float(4) 字符类型:char(2) 布尔型:boolean
二、引用类型:
String类型、封装类、接口、类、枚举、注解类型、数组类型
三、包装类
| 基本数据类型 | 包装类 |
| ------------ | --------- |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
| char | Character |
1、使用注意方面:
1、Integer:
public class Test3 {
public static void main(String[] args) {
Integer i1 = 11;//装箱
int i2 = 11;
Integer i3 = Integer.valueOf(11);
Integer i4 = new Integer(11);
//存在基本类型; int = Integer.valueOf()、Integer、new Integer()
System.out.println("A:"+(i1 == i2));//true
System.out.println("B:"+(i2 == i4));//true
System.out.println("C:"+(i2 == i3));//true
// Integer在声明初始化时,会先判断大小是否在-128到127之间(常量池);
// 在区间内:Integer = Integer.valueOf(20) true
// 不在区间内:Integer != Integer.valueOf(220) false
System.out.println("D:"+(i1 == i3));//false
// Integer在声明初始化时,会先判断大小是否在-128到127之间(常量池);
// 不管在不在区间 Integer.valueOf(220) 永不等于 new Integer(220)
// Integer.valueOf(11):已缓存对象的引用;
// new Integer():重新在堆内开辟空间,引用的地址也发生变化;所以两个引用地址不一致;
System.out.println("E:"+(i3 == i4));//false
//相当于 把 Integer 拆箱成int 来作比较
System.out.println("F:"+(i3.equals(i4)));//true
}
}
2、性能方面:
1、装箱:基本数据类型->包装类型;
2、拆箱:包装类->基本数据类型;
3、装箱和拆箱向堆中申请空间,频繁的创建会导致导致堆空间碎片很多;相比而言,基本类型的运算则高效很多
long start = System.currentTimeMillis();
Long sum = 0L; // 使用包装类相加
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end-start)/1000.0);
// 输出:
// 2305843005992468481
// 耗时:15.175
start = System.currentTimeMillis();
long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i; // 使用基本数据类型相加
}
System.out.println(sum);
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end-start)/1000.0);
// 输出:
// 2305843005992468481
// 耗时:1.643
两者代码的区别仅仅在于前者的sum为包装类Long,后者的sum为基本类型long
五、基本类型 与 包装类型 之间的转换
public class TestDemo {
public static void main(String[] args) throws IOException {
//String 转 int: 两种方法
String st = "100";
int ita = Integer.parseInt(st);
int ita2 = Integer.valueOf(st).intValue();
System.out.println("String 转 int: 两种方法:"+ita+","+ita2);
//int 转 String 三种方法
int at = 100;
String ast = String.valueOf(at);
String ast2 = Integer.toString(at);
String ast3 = "" + at;
System.out.println("int 转 String 三种方法:"+ast+","+ast2+","+ast3);
//long 转 String 两种方法
long lg = 100L;
String alg = String.valueOf(lg);
System.out.println("long 转 String:"+alg);
//String 转 long 两种方法
String lst = "111";
long sum1= Long.valueOf(lst).longValue();
long sum2 = Long.parseLong(lst);
System.out.println("String 转 long 两种方法:"+sum1+","+sum2);
//Long 转 String
Long Lg = 200L;
String alg2 = Long.toString(Lg);
System.out.println("Long 转 String:"+alg2);
//String 转 Long
String ssl = "100";
Long lss = Long.valueOf(ssl);
System.out.println("String 转 Long:"+alg2);
//long 转 Long
long ll = 100;
Long llg = ll;//自动装箱拆箱
Long llg2 = Long.valueOf(ll);
System.out.println("long 转 Long:"+llg+","+llg2);
//Long 转 long
Long ggl = 100L;
long gl = ggl.longValue();
System.out.println("Long 转 long:"+gl);
//Long 转 int
Long lga = 100*100L;
int li = lga.intValue();
System.out.println("Long 转 int:"+li);
//int 转 Long
int il = 100;
Long ilg = Long.valueOf(String.valueOf(il));
System.out.println("int 转 Long:"+ilg);
//long 转 int
int li2 = Math.toIntExact(lga);
System.out.println("long 转 int:"+li2);
//int 转 long
int lgi = 100;
long igl = Long.valueOf(lgi).intValue();
System.out.println("int 转 long:"+igl);
//char 转 int 三种方法
char ch = '8';
int b1 = ch - '0';
int b2 = ch - 48;
int b3 = Integer.parseInt(Character.toString(ch));
System.out.println("char 转 int 三种方法:"+b1+","+b2+","+b3);
//int 转 char
int ci = 8+48;
char ci1 = (char)ci;
System.out.println("int 转 char:"+ci1);
//char 转 String 两种方法
char ccl = '9';
String stc = String.valueOf(ccl);
String stc2c = Character.toString(ccl);
System.out.println("char 转 String 两种方法:"+stc+","+stc2c);
//String 转 char[]
String stg = "abcd";
char[] cst = stg.toCharArray();
char cst2 = stg.charAt(0);
System.out.println("String 转 char[]:"+cst+""+cst2);
//将int 插入 list中,并转换成字符串
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
String ss = list.toString();
System.out.println("int to list,to string ->" + ss);//[2, 1, 3]
//将char[] 转换成 string
char[] helloArray = {'r', 'u', 'n', 'o', 'o', 'b'};
String helloString = new String(helloArray);
System.out.println("char[] to string ->" + helloString);//runoob
}
}