概述
19年第一文,哈哈,胡乱翻了翻,觉得这个基本类型的东西还是值得好好瞅瞅的,所以就看了看学习了一下,经常用的实体bean是存在默认值的,所以选择基本类型和包装类还是有说法的。希望各位大佬多多指点
数据度量单位
- 单位
bit:位/比特 是最小数据度量单位
Byte:字节, - 单位之间的关系
1Byte = 8bits
1KB = 1024Bytes
1MB = 1024KB
1GB = 1024MB
基本类型
-
基本类型占用字节数
类型 bit Byte 类型 默认值 包装类
byte 8 1 整型 0 Byte
short 16 2 0 Short
int 32 4 0 Integer
long 64 8 0 Long
float 32 4 浮点型 0.0f Float
double 64 8 0.0d Double
char 16 2 字符型 \u0000 Character
boolean 1 1/8 布尔型 false Boolean -
code
public class Demo43 {
public static void main(String[] args) {
Type t = new Type();
System.out.println("s"+t.getS());
System.out.println("b"+t.getB());
System.out.println("i"+t.getI());
System.out.println("l"+t.getL());
System.out.println("f"+t.getF());
System.out.println("d"+t.getD());
System.out.println("c"+t.getC());
System.out.println("t"+t.isT());
System.out.println(".......");
System.out.println(t.getSs());
System.out.println(t.getBb());
System.out.println(t.getIi());
System.out.println(t.getLl());
System.out.println(t.getFf());
System.out.println(t.getDd());
System.out.println(t.getCc());
System.out.println(t.getTt());
System.out.println("length.....");
String str = "我";
char c [] = str.toCharArray();
System.out.println(c.length);
}
}
@Data
class Type{
private short s;
private Short ss;
private Byte bb;
private byte b;
private int i;
private Integer ii;
private long l;
private Long ll;
private float f;
private Float ff;
private double d;
private Double dd;
private char c;
private Character cc;
private boolean t;
private Boolean tt;
}
结果
- 总结:Java8中基本类型都在存在默认值,而基本类型的包装类没有默认值,基本类型的包装类是一个对象。两个字节存储一个汉字,每个汉字的length为1。
包装类
- 代码
public static void main(String[] args) {
Integer ii1 = 1;
Integer i1 = 1;
Integer ii2 = 200;
Integer i2 = 200;
Integer ii3 = 3;
Long l = 3l;
Integer i3 =1;
Integer i4 =2;
System.out.println(ii1 == i1);
System.out.println(ii2 == i2);
System.out.println(ii2.equals(i2));
System.out.println(ii3 == (i3+i4));
System.out.println(l.equals (i3+i4));
// true
// false
// true
// true
// false
}
- 总结
(1)基本类型转化为包装类是装箱,包装类转化为基本类型是拆箱,
(2)装箱valueOf调用方法,拆箱调用intValue方法
(3)ii2 == i2
之所以不相等,是因为在比较的过程中,发生了自动装箱,即创建了新的对象,==
用于对象之间比较的是指向地址是否相同,因为创建了新的对象,所以支不相同。
(4)l.equals (i3+i4)结果为false,如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程),同时又使用了equals比较对象的内容,又触发了装箱的过程,因为类型装箱实现的区别所以结果存在差异。
(5)Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。Double、Float的valueOf方法的实现是类似的。
参考博客
https://blog.csdn.net/wanlixingzhe/article/details/7107923
https://www.cnblogs.com/dolphin0520/p/3780005.html