也说String。 String:不可变字符序列。 StringBuffer:线程安全的可变字符序列。 StringBuilder:StringBuffer的非线程安全实现,JDK1.5+。 1 常量池 在Java源代码中的每一个字面值字符串,都会在编译成class文件阶段,形成标志号为8(CONS ...
分类:
其他好文 时间:
2016-07-24 01:42:28
阅读次数:
194
电脑硬盘的内容得加载到内存之中才能进行各种运算,而栈和堆则是存在内存之中。栈:存放引用类型(对象和常量池)。引用类型:因为栈是有序的,我的位置也是固定,可以通过我的地址引用我。 堆:存放值类型(具体的数据类型)。值类型:因为堆是无序的,我的位置是不固定的,只能把我从堆取出来才可以用。 ...
分类:
其他好文 时间:
2016-07-21 00:51:16
阅读次数:
157
Java虚拟机运行时数据区包括PC寄存器、Java虚拟机栈、Java堆、方法区、本地方法栈、运行时常量池六个部分。 1. PC寄存器 PC寄存器(又叫程序计数器,Program Counter Register),每一条Java虚拟机线程都有自己的PC寄存器。PC寄存器报错当前正在执行方法的字节码指 ...
分类:
编程语言 时间:
2016-07-15 13:34:11
阅读次数:
165
字符串不属于基本类型,但是可以像基本类型一样,直接通过字面量赋值,当然也可以通过new来生成一个字符串对象。不过通过字面量赋值的方式和new的方式生成字符串有本质的区别: 通过字面量赋值创建字符串时,会优先在常量池中查找是否已经存在相同的字符串,倘若已经存在,栈中的引用直接指向该字符串;倘若不存在, ...
分类:
其他好文 时间:
2016-07-15 12:43:56
阅读次数:
158
字符串
new String(“abc”)创建了几个对象?
一个或两个,如果常量池中原来有“abc”,则只创建一个对象;如果常量池中原来没有字符串“abc”,那么就会创建两个对象。
String s="abc";
String s1="ab"+"c";
System.out.println(s==s1);
输出 true ,因为"ab"+"c"在编译器就被转换为"abc",存放在常量区,...
分类:
编程语言 时间:
2016-07-10 19:00:23
阅读次数:
203
JAVA中,有六个不同的地方可以存储数据: 1.寄存器:最快的存储区,位于不同于其他存储区的地方——处理器内部。寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。 2. 栈:存放基本类型的变量数据和对象的引用。位于通用RAM中,但通过 ...
分类:
其他好文 时间:
2016-07-10 18:20:45
阅读次数:
201
Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。 所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。 而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的 ...
分类:
其他好文 时间:
2016-07-10 18:09:18
阅读次数:
120
我们可以总结一下在java程序中有六种数据区 1.程序计数器2.JVM栈3.本地方法栈(他们是线程私有的) 4.堆5.方法区6.常量池(他们是线程共有的) 内存是什么? 内存就是暂时存储程序以及数据的地方,要注意的是它和外存不同,外层只是存储的地方,就好比是书架放书而内存则是书桌的相对概念 关于这六 ...
分类:
编程语言 时间:
2016-07-06 00:19:47
阅读次数:
201
运行以下方法: 小例子:如何说明String常量池的位置 感谢原作者!!! ...
分类:
编程语言 时间:
2016-07-05 22:15:44
阅读次数:
1262
"==" 是比较的是两个对象的内存地址,而equals方法默认情况下是比较两个对象的内存地址. 1.String str = "hello" 生成的字符串,首先是去检查字符串常量池中是否已经存在了这个"hello" ,若存在,就不会再创建一个新的"hello",直接返回常量池中的这个字符串地址,若不 ...
分类:
编程语言 时间:
2016-07-05 22:08:29
阅读次数:
133