1:JVM为了减少字符串对象重复创建,其维护了一个特殊的内存,这段内存就是字符串常量池 2:使用new创建的字符串对象,如果想将这个对象的引用加入到字符串常量池,可以使用intern方法;str1.intern() 3:字符串常量池存放的是对象引用,不是对象本身 4:字符串常量池实现的前提条件就是J ...
分类:
其他好文 时间:
2019-05-23 14:27:32
阅读次数:
119
访问对象中的属性: 引用名称.属性名称 访问对象中的方法: 引用名称.方法名称() String的地址要是常量池没有,会自动开辟 ...
分类:
其他好文 时间:
2019-05-21 12:56:52
阅读次数:
108
如果字符串常量池中不存在“abc”,该语句执行时会先在字符串常量池中创建一个“abc”对象,在执行new语句时在堆去开辟新的空间,创建“abc”字符串,同时栈区会有一个引用s指向堆区的对象,此时如果要算上栈区的引用,共创建3个对象,不算,则创建两个对象。 二:如果字符串常量池中存在“abc”,则只会 ...
分类:
其他好文 时间:
2019-05-18 11:10:41
阅读次数:
157
对于 java 中 Integer 类型 比较 ,经常在面试中被提到 ,有时 还真的 让人 头疼。下面我来分析下。integer 比较问题。 解决 Integer 值比较问题。我想从以下几点说起。 1. Integer 的源码。 2.堆内存与常量池 从Integer 源码开 。 在 -128 到 1 ...
分类:
编程语言 时间:
2019-05-18 00:46:41
阅读次数:
132
java常量池技术 java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,常量池存在于方法区中 Constant pool: #1 = Methodre ...
分类:
编程语言 时间:
2019-05-14 12:52:06
阅读次数:
220
1.用双引号创建 2.用new String方式创建 3.双引号相加创建 4.两个new String相加时 5.双引号加new String创建或者new String加双引号创建 总结: 1.只在常量池上创建常量 2.只在堆上创建对象(指的是AA) String a2 = new String( ...
分类:
其他好文 时间:
2019-05-13 22:55:12
阅读次数:
148
今天发现一个好玩的东西 我想应该是初始化时java把java这个字符串以及48个关键字都放在了字符串常量池中。。。 各位大佬,小弟猜的对不对? ...
分类:
编程语言 时间:
2019-05-12 19:58:38
阅读次数:
160
Java内存分配: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,以及成员方法中的局部变量 ◆堆:存放对象本身(成员变量+成员方法的引用) ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久存储空间 栈的存取速度比堆快,仅次于寄 ...
分类:
编程语言 时间:
2019-05-12 15:53:47
阅读次数:
153
String.intern()方法返回常量池中和String对象的值相同的常量的引用,如果常量池中没有该常量,则把该String对象的值加入常量池 ...
分类:
其他好文 时间:
2019-05-09 19:56:48
阅读次数:
293
参考链接: 0.gc的产生 如下,每帧都在分配内存,为了回收这些没有被引用到的内存,就触发了垃圾回收机制(gc) 1.string 如下,定位到第1帧,字符串赋值和拼接都会触发gc,说明有新对象的产生;但是从第2帧开始就没有gc了,这是因为字符串常量池的存在: https://blog.csdn.n ...
分类:
编程语言 时间:
2019-05-09 00:22:09
阅读次数:
159