Java知识:数据存储位置&常量池
2017-07-04 15:48
295 查看
1.数据存储位置
常用到的数据存储位置有下面3个,其他的也有但是作者水平差,就先总结3个方便自己记忆。
1.栈
1 基础数据类型 byte short int long float double char boolean 2 方法的形式参数,方法调用完后从栈空间回收 3 引用对象的地址,引用完后,栈空间地址立即被回收
2.堆
1 new出来的对象 2 数组
3.方法区
1 常量池2 static3 所有的class举些例子:String s1 = "china"; String s2 = "china"; String s3 = "china"; String ss1 = new String("china"); String ss2 = new String("china"); String ss3 = new String("china");这里解释一下黄色这3个箭头,对于通过new产生一个字符串(假设为“china”)时,会先去常量池中查找是否已经有了“china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。 这也就是有道面试题:Strings=newString(“xyz”);产生几个对象?一个或两个,如果常量池中原来没有”xyz”,就是两个。对于基础类型的变量和常量,变量和引用存储在栈中,常量存储在常量池中。
如以下代码:
int i1 = 9;int i2 = 9;int i3 = 9;final int INT1 = 9;final int INT2 = 9;final int INT3 = 9;编译器先处理inti1 = 9;首先它会在栈中创建一个变量为i1的引用,然后查找栈中是否有9这个值,如果没找到,就将9存放进来,然后将i1指向9。接着处理int i2 = 9;在创建完i2的引用变量后,因为在栈中已经有9这个值,便将i2直接指向9。这样,就出现了i1与i2同时均指向9的情况。最后i3也指向这个9。我认为虽然两个栈和常量池中都是9但是还是有所区别的。我是从好几个博客摘抄的,自己能力有限,如果不对请指正。
相关文章推荐
- java中数据的5种存储位置(堆与栈)
- Java基础知识强化之IO流笔记46:IO流练习之 把文本文件中数据存储到集合中的案例
- Thinking in java 之'对象的存储位置'
- (重要!)java中数据的5种存储位置(堆与栈) 成员变量局部变量内存分配
- 黑马程序员——java基础知识篇——>标识符、关键字、常量、进制表示、数据类型、运算符等
- JAVA内存存储数据的位置
- java数据的5种存储位置(转)
- 【C#小知识】C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用
- Java基础知识强化之IO流笔记45:IO流练习之 把集合中的数据存储到文本文件案例
- 【转载】Java中的数据存储(堆、栈、常量池)
- Spark streaming不同数据来源(socket套接字、hdfs目录)和存储位置(hdfs、本地)的java代码
- Java中的数据存储(堆、栈、常量池
- java---堆、栈、常量池的存储数据
- [Java]数据存储(栈,堆,常量池)
- java中数据存储的位置
- Java中的数据存储(堆、栈、常量池),不敢独享
- Java中的数据存储(堆、栈、常量池)
- Java知识(标识符、数据的存储和类型)
- 存储基础知识(七):数据备份与容灾
- 《Thinking in JAVA》之java的数据存储