文章只是用作记录
数据类型:
强调:自动装拆箱是在jdk1.5之后
整型==》
int---------------->4个字节------>包装类:Integer
short------------>2个字节------>包装类:Short
long------------->8个字节------>包装类:Long
byte------------->1个字节------>包装类:Byte
浮点型=》
float------------->4个字节------>包装类:Float
double---------->8个字节------>包装类:Double
char型=》
char------------->1个字节------>包装类:Character
Boolean型=》
boolean-------->1/8或1或4 个字节(自己找的资料,书中并没有对这个进行解释)------>包装类:Boolean
1/8个字节:
boolean型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中按位算,仅需1位(bit)即可存储,1bit=1/8个字节;
1个字节:
虽然编译后1个0只需占用1个bit位,但计算机处理数据 的最小单位是1个字节,1个字节为8个bit位,实际存储:用1个字节的最低位存储,其他7位用0填补
4个字节:
在《Java虚拟机规范》中,Java语言表达式所操作的boolean值,在编译后都是用Java虚拟机中的int类型来替代,也就是说JVM规范指出boolean当做int处理,也就是4个字节。
为什么虚拟机采用int来替代boolean型数据,不用byte或者short?
这样不是更节省空间,使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),32 位 CPU 使用 4 个字节是最为节省的,哪怕你是 1 个 bit 他也是占用 4 个字节。因为 CPU 寻址系统只能 32 位 32 位地寻址,具有高效存取的特点。
————————————————
关于Boolean类型占用字节的解释–原文链接:https://blog.csdn.net/YuanMxy/article/details/74170745
final关键字
一。修饰类
表示这个类不能被继承,用final修饰的类中成员变量可以根据需求设置final,但是类中所有的成员方法都别隐式的指定为final方法。
被设计为final类的有string和System等
二。修饰方法
被final修饰的方法不能被重写,可以重载,一个类的 private方法会隐式的被指定为final方法。
使用final修饰方法的原因:
1.将方法锁定:以防任何类继承修改它的含义
2.效率:在早期Java版本中,将final方法转为内嵌调用。但是由于方法太过庞大,看不到内嵌调用带来的任何性能提升。在后期的Java版本中,不需要使用final方法进行这些优化了。
三。修饰成员变量
必须要赋予初始值,而且只能初始化一次。
被final修饰的成员变量赋值方法有两种:
1.直接赋值
2.全部在构造方法中赋值
如果修饰的成员变量是一个引用类型,则这个引用的地址的值不能修改,但是这个引用中的属性变量的内容可以改变。
此处代码块,借鉴来的
public class TestFinal {
public static void main(String[] args) {
final StringBuilder sb = new StringBuilder("123");
// 同一对象的hashCode值相同
System.out.println("sb中的内容是:" + sb);
System.out.println(sb + "的哈希编码是:" + sb.hashCode());
sb.append("我变了");
System.out.println("sb中的内容是:" + sb);
System.out.println(sb + "的哈希编码是:" + sb.hashCode());
System.out.println("-----------------哈希值-------------------");
TestFinal test = new TestFinal();
System.out.println(test.hashCode());
System.out.println(Integer.toHexString(test.hashCode()));
System.out.println(test.getClass().getName() + "@"
+ Integer.toHexString(test.hashCode()));
System.out.println(test.toString());
}
}
结果:
sb中的内容是:123
123的哈希编码是:14576877
sb中的内容是:123我变了
123我变了的哈希编码是:14576877
-----------------哈希值-------------------
12677476
c17164
pnunu.oa.test.TestFinal@c17164
pnunu.oa.test.TestFinal@c17164