为什么String 的变量输出不是地址?
因为所有的类继承Object类,所以单独输出一个对象的时候,他会调用Object.toString,打印出来的就是一串表达地址的字符串,最后调用的toString。
然而我们的String类里重写了toString(),它返回的是String自己,String是什么呢,String其实就是字符数组(),它内部封装了一个字符数组,所以打印字符串就是打印字符数组,而不是地址
关于Java中String内存地址的问题。
在创建String类型的变量的时候建议使用直接赋值的方法去创建对象,在多个变量使用同一个字符串的时候,
如果采用new 的方法的话,创建出来的对象是放在栈内存中,每个变量都会开辟出新的内存空间来完成储存,不管字符串是否一致。
如果采用直接赋值的方式的话,字符串会放在常量池当中(常量池是堆内存中的一块特殊区域–常量池的位置变化在文末),不管创建多少个对象,都是引用的常量池的那个字符串,
两种方法相比较下来,直接赋值更加节省内存空间。
(个人理解观点,如有错误,还请纠正。0.0)
在6以及6版本以前 , 常量池是存放在了堆中 .
在7版本中, 将常量池存放到了堆中
在 8 版本之后, 取消了整个永久代区域,用元空间取代, 运行时常量池 和静态常量池存放在元空间中 , 而字符串常量池依然存放在堆中