本节:1. 内存中的堆和栈 2. 常量池
一、 内存中的堆和栈
空指针异常,没有new对象。找不到对应的实例块,所以报错。
第4题,虽然new的是book,但是book里面的变量没有new,所以是空。
new了里面的变量才可以有值。
二、常量池可以分为
:静态常量池,运行时常量池。
静态常量池 存在于
class
文件中,比如经常使用的
javap -verbose
中,常量池总是在最前面
运行时常量池呢,就是在
class
文件被加载进了内存之后,常量池保存在了方法区中,通常说的常
量池 值的是运行时常量池。所以呢,讨论的都是运行时常量池。
一眼可以看到里面的值,就是常量,就在常量池里面。例:int a =1;.
对象赋值到新的变量上,只是一个标识,并没有真正的实例,所以所有的改变还是在原来的对象,原来的块上面。
![](https://i-blog.csdnimg.cn/blog_migrate/b78775f206358686f8f538e39aa20c34.png)
双等号
==
判断两个对象内存地址是否相同
![](https://i-blog.csdnimg.cn/blog_migrate/be62fb443c6a2073b5c93ada35fc1d6b.png)
双等号,只看你变量地址一不一样,连你的类是不是一样,都不管。
![](https://i-blog.csdnimg.cn/blog_migrate/0bdd847a45e6506b1452599f82e6180e.png)
字符串是特例,要特地记变量地址是不一样;
其他类型都是在常量池,所以==数据地址是一样的。