1.java程序中所有字符的字面值都作为string 类的实例实现。,字符串本质是一个字符的数组。 1 //演示字符串 具备final属性,一次赋值,终生不变 2 String str = "oracle";//此时str被定义为变量,“oracle”创建一个字符串对象 ,并匹配一个地址3 str ...
分类:
编程语言 时间:
2019-12-24 23:31:26
阅读次数:
94
java中内存主要包含4块,堆内存区、栈内存区、常量池、方法区。 堆内存中:存放的是new出的对象(引用类型也是对象,比如String,数组),new出的对象只包含成员变量。 栈内存中:存放的是局部成员变量。对于基本的数据类型存放的是基本变量的值,而对于对象变量,存放的是堆内存的地址。 常量池:存放 ...
分类:
编程语言 时间:
2019-12-12 01:21:22
阅读次数:
112
Java常量池 Java常量池其实分为两种:静态常量池和运行时常量池 1.静态常量池 所谓 静态常量池 ,即 .class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。这种常量池主要用于存放两大类常量: 字面量 (Lit ...
分类:
编程语言 时间:
2019-12-08 19:08:16
阅读次数:
104
面试官:如何创建一个局部byte类型数组? 小白:(是不是太基础了,暗笑)byte[] arrays = new byte[1024]。 面试官:这个局部arrays变量指向的数组对象什么时候会被GC回收? 小白:没有变量引用这个数组对象,或者arrays在虚拟机栈中的局部变量表的局部变量空间(Sl ...
分类:
其他好文 时间:
2019-12-06 21:58:23
阅读次数:
140
1.synchronized可以使用任意的Object进行加锁,用法比较灵活 另外特别注意一个问题,就是不要使用String常量加锁,会出现死循环 输出结果: 永远都是t1开始,t1结束,没有t2什么事,这是什么原因呢? String在常量池中只有一个引用,所以尽量不要用字符串常量去加锁 可以采用如 ...
分类:
其他好文 时间:
2019-12-04 10:36:15
阅读次数:
104
10.1常量入栈操作许多操作码执行常量入栈操作。操作码在执行常量入栈操作之前,使用如下三种方式指明 常量的值:常量值隐式包含在操作码内部,常量值在字节码流中如同操作数一样紧随在操作码 之后,或者从常量池中取出常量。 一些操作码自行指明入栈的常量的类型和值,例如,iconst_1操作码告知Java虚拟 ...
分类:
其他好文 时间:
2019-12-03 23:03:57
阅读次数:
89
常量池中容纳的符号引用包括三种特殊的字符串:全限定名、简单名称和描述符。所有的符 号引用都包括类或者接口的全限定名。字段的符号引用除了全限定类型名之外,还包括简单字段 名和字段描述符。方法的符号引用除了全限定类型名之外,还包括简单方法名和方法描述符。 在符号引用中使用的特殊字符串也同样用来描述被cl ...
分类:
其他好文 时间:
2019-12-03 21:44:10
阅读次数:
104
1、String 对象的两种创建方式: // 在常量池中拿对象String str1 = "abcd"; // 直接在堆内存空间创建一个新的对象 String str2 = new String("abcd"); sout(str1 == str2); // false 注: 只要使用 new方法, ...
分类:
其他好文 时间:
2019-12-02 18:37:52
阅读次数:
89
第一部分:面试题 本篇文章我们将尝试回答以下问题: 1. 描述一下jvm的内存结构 2. 描述一下jvm的内存模型 3. 谈一下你对常量池的理解 4. 什么情况下会发生栈内存溢出?和内存溢出有什么不同? 5. String str = new String(“abc”)创建了多少个实例? 第二部分: ...
分类:
其他好文 时间:
2019-12-01 21:15:57
阅读次数:
111
String类对象的拼接操作:执行到s+="world"语句时,常量池会先创建"world"对象,再去创建"helloworld"对象,最后将"helloworld"对象的首地址赋给栈内存的s变量 StringBuilder构造方法: StringBuilder添加和反转方法: 1 import j ...
分类:
编程语言 时间:
2019-12-01 16:31:44
阅读次数:
89