Java知识:数据存储位置&常量池

发布时间:2021-10-16 10:46:45

1.数据存储位置
常用到的数据存储位置有下面3个,其他的也有但是作者水*差,就先总结3个方便自己记忆。
? ? ? ?1.栈

1 基础数据类型 byte short int long float double char boolean
2 方法的形式参数,方法调用完后从栈空间回收
3 引用对象的地址,引用完后,栈空间地址立即被回收
2.堆

1 new出来的对象
2 数组
3.方法区

1 常量池
2 static
3 所有的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;





编译器先处理int i1 = 9;首先它会在栈中创建一个变量为i1的引用,然后查找栈中是否有9这个值,如果没找到,就将9存放进来,然后将i1指向9。接着处理int i2 = 9;在创建完i2的引用变量后,因为在栈中已经有9这个值,便将i2直接指向9。这样,就出现了i1与i2同时均指向9的情况。最后i3也指向这个9。



我认为虽然两个栈和常量池中都是9但是还是有所区别的。


我是从好几个博客摘抄的,自己能力有限,如果不对请指正。

相关文档

  • 线程:Lock接口和死锁
  • 微信公众订阅号可以注销吗
  • 军训汇报发言稿三篇
  • 树莓派-wiringPi-UART串口
  • 杭州健康码进不去怎么办杭州健康码相关问题汇总
  • 九江天赐材料怎么样
  • 鸡蛋“跳楼”记
  • 傍晚一个人散步散文_描写一个人散步散文
  • 拍摄甜品的几个小技巧
  • 宰鱼
  • android开发要学什么语言!阿里P8面试官都说太详细了,成功入职阿里
  • 哪种水果排毒效果好春天吃什么水果排毒
  • 考研的时候有哪些错误的建议
  • 场地租赁合同样式
  • 苹果11屏幕有多大
  • 一人在吃树叶打一成语的答案
  • 初二英语文章带翻译
  • 消防安全宣传手抄报图片大全
  • 工程完工的最新精选五篇表扬信范文大全
  • 我家有盆木芙蓉
  • 手办是什么意思
  • linux系统中手动更改磁盘分区与挂载
  • 属鸡人出生年月日的命运
  • k8s中kubectl管理工具使用的简写命令
  • 六年级语文下册第十七课汤姆索亚历险记
  • 土木工程专业实习日记
  • 桂花鱼怎么做好吃桂花鱼的简单做法
  • 晴天吉他谱简单版数字
  • Yolov3&Yolov4&Yolov5模型权重及网络结构图资源下载
  • 实时获取 subprocess 管道输出在 ffmpeg 上的封装
  • 猜你喜欢

    电脑版