Java堆.栈和常量池 笔记
今天复习了一下这些知识,顺便做了下笔记.
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
3. 堆:存放所有new出来的对象。
4. 静态域:存放静态成员(static定义的)
5. 常量池:存放字符串常量和基本类型常量(public static final)。
6. 非RAM存储:硬盘等永久存储空间
这里我们主要关心栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。
对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。
如以下代码:
Java代码
String s1 = "china";
String s2 = "china";
String s3 = "china";
String ss1 = new String("china");
String ss2 = new String("china");
String ss3 = new String("china");
String s1 = "china";
String s2 = "china";
String s3 = "china";
String ss1 = new String("china");
String ss2 = new String("china");
String ss3 = new String("china");
对于基础类型的变量和常量:变量和引用存储在栈中,常量存储在常量池中。
如以下代码:
Java代码
int i1 = 9;
int i2 = 9;
int i3 = 9;
public static final int INT1 = 9;
public static final int INT2 = 9;
public static final int INT3 = 9;
int i1 = 9;
int i2 = 9;
int i3 = 9;
public static final int INT1 = 9;
public s
相关文档:
java Map 遍历速度最优解
第一种:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
效率高,以后一定要使用此种方式!
第二种:
Map map = ......
经过长时间的面试,以下是JAVA面试的常见的笔试题的整理。
1、String和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操纵字符串,即包含多个字符的字符数据。
String类提供了数值不可变的字符串。StringBuffer类提供的字符串进行修改。当知道字符数据要改变 ......
对于Java语言,最体贴的一项设计就是它并没有打算让人们为了写程序而写程序——人们也需要考虑程序的文档化问题。对于程序的文档化,最大的问题莫过于对文档的维护。若文档与代码分离,那么每次改变代码后都要改变文档,这无疑会变成相当麻烦的一件事情。解决的方法看起来似乎很简单:将代码同文档“链接&rd ......
《Java高级技术》课程简介
1. Java程序设计语言引论
2. Java语言的结构化特性
3.1. Java语言的面向对象特性(1)
3.2. Java语言的面向对象特性(2)
3.3. Java语言的面向对象特性(3)
3.4. Java语言的面向对象特性(4)
4.1. 面向对象设计原则
4.2. 面向对象设计模式示例
5.1. Java的异常处理机制
5.2. Java语言 ......