java string 空间_Java中,String str = “Runoob”;这个语句中str和“Runoob”都占空间吗?分别占多大?...
题目描述
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”都占空间吗?分别占多大?...相关推荐
- java获取数字_java 获取String中的数字
随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取出来呢?大致有以下几种方法, ...
- java replaceall函数_java基础—-String中replace和replaceAll方法
这里面我们分析一下replace与replaceAll方法的差异以及原理. replace各个方法的定义 一.replaceFirst方法 public String replaceFirst(Str ...
- java string返回_Java的String字符串内容总结
String--字符串 获取字符串的长度 使用Sring类的length()方法可获取字符串对象的长度,例: str.length(); str代表指定的字符串对象;返回值为返回指定字符串的长度.例: ...
- java string遍历_java 遍历String
Java字符串是一系列的Unicode字符序列,但是,它却常常被误认为是char序列.于是,我们经常这样来遍历字符串: package testchar; public class TestChar2 ...
- java string中文_Java将String字符串的英文双引号批量转换成中文双引号
除了下面的方法,当然也可以使用正则进行匹配,方法众多/** * 将字符串的英文双引号替换为中文双引号 * @author X-rapido */ public class ReplaceString ...
- java 内存分布_java的各类型数据在内存中分配情况详解_
1. 有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构.说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚,但掌握Jav ...
- java menuitem 图标_java – 如何以编程方式更改ActionBar中的MenuItem图标
如何以编程方式更改ActionBar中的MenuItem图标?我试着用 MenuItem menuItem = (MenuItem)findViewById(R.id.action_settings) ...
- java if 定义变量_java – 如何分配在if else语句中定义的变量
我需要创建能够在GMT中找到当前小时并将其转换为EST的内容. 当我尝试编译并运行程序时,我收到此错误:currentHourEST无法解析为变量.我认为我的问题是if else语句中的某个地方,因为 ...
- (转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)
原处:http://blog.csdn.net/ns_code/article/details/17485221 在这里看到了try catch finally块中含有return语句时程序执行的几种 ...
- java中if(a.c())_if 语句中的条件语句只能是() 类型。_学小易找答案
[单选题]设 x,y 均为已定义的类名,下列声明对象 x1 的语句中正确的是 ( ) [单选题]C# 中引入命名空间使用 [简答题]class Parent{ private String name; ...
最新文章
- c#,winform,验证输入内容,文本框,长度,errorprovider组件,方便,快捷
- 零代码入门GitHub,图形化交互让你轻松存代码 | 附Git GUI推荐
- mysql附件卸载_彻底卸载mysql
- 神奇的bibtex插件:你的论文文献小助手
- html %3c 不给转义,八个无法利用XSS漏洞的场景
- 学习STM32很简单?
- python树莓派编程_python树莓派编程
- Embeded linux OS Reading Notes
- (4)散列函数设计:除留余数法
- docker安装软件(vim,service)
- 计算机网络基础高职pdf,高职《计算机网络基础》课程教学改革的思考.pdf
- 中文NER碎碎念—聊聊词汇增强与实体嵌套
- Ubuntu 10.10 安装新版 Ubuntu One 客户端
- SQL SERVER存储过程的几种示例
- OrzFAng系列–树 解题报告
- 电脑常见故障排除手册(黑屏、死机、重启、蓝屏)
- C语言图形库——easyx的使用
- 移动硬盘数据丢失恢复办法
- 南天PR2 PR2E PR9 中航 PR-b PR-V PR-C PR-t PR-u PR-d GWI PR2 plus 打印机驱动安装视频教程
- IBM_P870_F900连接方式更改(交换机改直连)