八种基本数据类型
可具体分为三类,数值类型byte、short、int、long、double、float,布尔类型boolean,字符类型char,其中数值类型又可分为,整数类型byte、short、int、long,浮点类型double、float。
基本类型 | byte | short | int | long | double | float | boolean | char |
二进制位数 | 8 | 16 | 32 | 64 | 64 | 32 | — | 16 |
封装类 | Byte | Short | Integer | Long | Double | Float | Boolean | Character |
最大值 | Byte.MIN_VALUE | Short.MIN_VALUE | 略 | 略 | 略 | 略 | 略 | 略 |
最小值 | Byte.MAX_VALUE | Short.MAX_VALUE | 略 | 略 | 略 | 略 | 略 | 略 |
最大值最小值无需刻意记忆,其数值都已经在对应的包装类中定义,值得注意的是byte、short、int、long其最大值为对应类型的2的二进制位数减一次方再减去1,最小值为-2的二进制位数减一次方,有点拗口,例如:byte最大值为2^(8-1)-1即127,最小值为-2^(8-1)即-128,short、int、long同理,可方便记忆。
boolean的二进制位数百度得到的答案五花八门,有兴趣的可转(https://www.jianshu.com/p/2f663dc820d0)了解一下
基本类型与封装类
封装概念:隐藏对象的属性和细节,仅对外提供公共的方法进行访问。
为什么要封装:Java语言——一切皆是对象
基本类型与封装类区别:
- 基本类型存储在栈中,对象类型(封装类)则是在堆中创建,需要注意的是,对象类型的引用是在栈中创建,就效率而言,在栈中分配内存效率比在堆中分配内存效率要高,缺点是在栈中分配内存存在内存泄漏的问题;
- 基本类型是按值传递,封装类同为按值传递(需要提到一个概念,Java只有按值传递而没有按引用传递),不同的是,基本类型在函数调用时,传递的是值的副本,而封装类传递的是引用的副本。
按值传递:指在函数调用时,传递的是值的副本(形参),在该函数中修改参数的值将不会影响到实际参数(实参);
按引用传递:是指在函数调用时,传递的是对象的引用,指向的是同一个堆内存地址,也可理解为内存地址的传递,操作的都是同一个对象; - 有些场合只能使用封装类,比如泛型、集合List;