题目描述

1,”Runoob”这个字面值是在方法区的常量池中,它占多大空间?

2,str是存在栈区吗?它又占多大空间呢?是占一个

char型大小的空间吗?

3,str是存放的”Runoob”的值还是它的地址呢?

不一定,下面说

是;一般是4字节;不是,char一般2字节(但是也不一定,和1同理)

引用,java的世界里用“引用”

对象的大小,说白了就是 对象头的大小 + 字段的大小 + 对齐

不同java版本,不同jvm实现,一些细节会有区别,这里引入一个库:jol,然后执行下面的代码,就可以得到 String 的大小:

System.out.println(ClassLayout.parseClass(String.class).toPrintable());

在zulu jdk11下运行,输出如下:

java.lang.String object internals:

OFFSET SIZE TYPE DESCRIPTION VALUE

0 12 (object header) N/A

12 4 byte[] String.value N/A

16 4 int String.hash N/A

20 1 byte String.coder N/A

21 3 (loss due to the next object alignment)

Instance size: 24 bytes

Space losses: 0 bytes internal + 3 bytes external = 3 bytes total

对象头:12字节

内容数组的引用:4字节

保存哈希的int:4字节

保存编码的byte:1字节

上面加起来21字节,要8字节对齐所以还要补3字节到24字节

于是,在我的环境里,一个 String 对象的大小是:24字节

所以 String 的大小其实是固定的,会变的是保存字符串内容的数组的大小(java9之前是char[],后面是byte[],char和byte都是2字节),数组虽然特殊,但是道理是一样的,以“Runoob”为例:

对象头:12字节

保存length的int:4字节

元素大小 * 元素大小,这里是 2 * 6 = 12个字节

上面加起来 28字节,对齐之后是 32字节

参考:

https://stackoverflow.com/que…

https://www.baeldung.com/java…

回答

java string 空间_Java中,String str = “Runoob”;这个语句中str和“Runoob”都占空间吗?分别占多大?...相关推荐

  1. java获取数字_java 获取String中的数字

    随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取出来呢?大致有以下几种方法, ...

  2. java replaceall函数_java基础—-String中replace和replaceAll方法

    这里面我们分析一下replace与replaceAll方法的差异以及原理. replace各个方法的定义 一.replaceFirst方法 public String replaceFirst(Str ...

  3. java string返回_Java的String字符串内容总结

    String--字符串 获取字符串的长度 使用Sring类的length()方法可获取字符串对象的长度,例: str.length(); str代表指定的字符串对象;返回值为返回指定字符串的长度.例: ...

  4. java string遍历_java 遍历String

    Java字符串是一系列的Unicode字符序列,但是,它却常常被误认为是char序列.于是,我们经常这样来遍历字符串: package testchar; public class TestChar2 ...

  5. java string中文_Java将String字符串的英文双引号批量转换成中文双引号

    除了下面的方法,当然也可以使用正则进行匹配,方法众多/** * 将字符串的英文双引号替换为中文双引号 * @author X-rapido */ public class ReplaceString  ...

  6. java 内存分布_java的各类型数据在内存中分配情况详解_

    1. 有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构.说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚,但掌握Jav ...

  7. java menuitem 图标_java – 如何以编程方式更改ActionBar中的MenuItem图标

    如何以编程方式更改ActionBar中的MenuItem图标?我试着用 MenuItem menuItem = (MenuItem)findViewById(R.id.action_settings) ...

  8. java if 定义变量_java – 如何分配在if else语句中定义的变量

    我需要创建能够在GMT中找到当前小时并将其转换为EST的内容. 当我尝试编译并运行程序时,我收到此错误:currentHourEST无法解析为变量.我认为我的问题是if else语句中的某个地方,因为 ...

  9. (转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)

    原处:http://blog.csdn.net/ns_code/article/details/17485221 在这里看到了try catch finally块中含有return语句时程序执行的几种 ...

  10. java中if(a.c())_if 语句中的条件语句只能是() 类型。_学小易找答案

    [单选题]设 x,y 均为已定义的类名,下列声明对象 x1 的语句中正确的是 ( ) [单选题]C# 中引入命名空间使用 [简答题]class Parent{ private String name; ...

最新文章

  1. c#,winform,验证输入内容,文本框,长度,errorprovider组件,方便,快捷
  2. 零代码入门GitHub,图形化交互让你轻松存代码 | 附Git GUI推荐
  3. mysql附件卸载_彻底卸载mysql
  4. 神奇的bibtex插件:你的论文文献小助手
  5. html %3c 不给转义,八个无法利用XSS漏洞的场景
  6. 学习STM32很简单?
  7. python树莓派编程_python树莓派编程
  8. Embeded linux OS Reading Notes
  9. (4)散列函数设计:除留余数法
  10. docker安装软件(vim,service)
  11. 计算机网络基础高职pdf,高职《计算机网络基础》课程教学改革的思考.pdf
  12. 中文NER碎碎念—聊聊词汇增强与实体嵌套
  13. Ubuntu 10.10 安装新版 Ubuntu One 客户端
  14. SQL SERVER存储过程的几种示例
  15. OrzFAng系列–树 解题报告
  16. 电脑常见故障排除手册(黑屏、死机、重启、蓝屏)
  17. C语言图形库——easyx的使用
  18. 移动硬盘数据丢失恢复办法
  19. 南天PR2 PR2E PR9 中航 PR-b PR-V PR-C PR-t PR-u PR-d GWI PR2 plus 打印机驱动安装视频教程
  20. IBM_P870_F900连接方式更改(交换机改直连)

热门文章

  1. PCB走线分析——直角、差分、蛇形线
  2. 金蝶K3物料属性修改转换问题
  3. php视频主题,天兴工作室:zblog小视频主题 会员中心+全配色方案
  4. VCS Coverage 手册笔记
  5. Android Https网络连接失败,图片加载不出
  6. 南卡、ikf蓝牙耳机好用吗?两款蓝牙耳机多维度对比
  7. ROS限速、防syn、ip伪装、mac绑定、防火墙、屏蔽端口
  8. 49.第十一章 进程和计划任务 -- 进程和内存管理(一)
  9. JDBC 连接 PostgreSQL
  10. 设计一个属于自己的网站