八大基本类型,
byte,单字节
int,4字节
shortint,2字节
long,8字节
char,2字节,没有负,可表示中文。
boolean,单字节,按javac编译工具后理解是整形01.
float,4字节
double,8字节
自动拆装和自动装箱,存储堆浪费很多空间,一个线程的存储默认开启2048字节,不够存储了再开启,各个对象,java内存结构显示(堆),new一个对象有对象头8字节,内存指针8字节,那一个随便一个对象就有16字节以上。假如一个常用的int,得放大4被。多浪费。所以搞了个基本变量。超出的范围的就不算number罗。nan(not a number)。除了boolean和char,其他默认值都是0,类型匹配交给虚拟机。基本变量在javac期间就搞成了常量池中。类的结构。它压根跟堆没关系。只是运行时,方法栈里面的局部变量栈存储了(运算符栈一起),那方法调用方法就没它传递改变的事了。地址决定了一切。
另外提下string类型,本身是一个final类,至于为啥,本人考虑基于安全,因为string里面是基于本地方法实现,内涵就是一个final不可变数组,浪费堆内存,打印string这类就是改写了object类的tostring方法,为啥他浪费空间,看它源码就是存了一个终极字符char数组不可变。平时string a=“aa”。是先创建一个常量,a对应的是一个地址引用。如果再改变a=“aaa”那就是新建一个常量对象,把对应的a对象指向新建对象的地址。或者可以理解有没已经存在aaa这个对象。指向它。这样子就浪费内存了。object引用下来的equals和==都是比对内存地址,同一内存地址肯定存的是同一个对象还有值。后面string改写,把它变成比对字符串的值。比如刚才要是string a=New string(“aa”)这就搞了两个对象,一个是常量对象,括号里面的,另外的就是外面New的。那要是换作比对内存地址就不一样了。重写后就一样了。说了这么多,其实如果创建的字符串老是变更那就算了,浪费内存。这才出了个stringbuilder跟stringbuffer几乎一模一样,就是一个线程安全,一个不。它是一个非终极的char字符数组,可以改写。节省内存。