Java语言中一个字符占几个字节

2个字节。java中一个char型的数据(也就是一个字符)占两个字节。而Java中常用的字符包括数字、英文字母、英文符号、中文汉字、中文符号等,若在字符串中包含里面的多种字符,这时候它们就不是都占两个字符。

Java语言中一个字符占几个字节-Worktile社区

java中一个char型的数据(也就是一个字符)占两个字节。而Java中常用的字符包括数字、英文字母、英文符号、中文汉字、中文符号等,若在字符串中包含里面的多种字符,它们是否都占两个字符呢?答案是否定的。

主要区分清楚内码(internal encoding)和外码(external encoding)就好了。内码是程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编码;外码是程序与外部交互时外部使用的字符编码。“外部”相对“内部”而言;不是char或String在内存里用的内部编码的地方都可以认为是“外部”。例如,外部可以是序列化之后的char或String,或者外部的文件、命令行参数之类的。

Java语言规范规定,Java的char类型是UTF-16的code unit,也就是一定是16位(2字节);

char, whose values are 16-bit unsigned integers representing UTF-16 code units (§3.1).

然后字符串是UTF-16 code unit的序列:

The Java programming language represents text in sequences of 16-bit code units, using the UTF-16 encoding.这样,Java规定了字符的内码要用UTF-16编码。或者至少要让用户无法感知到String内部采用了非UTF-16的编码。

“感知”可以是多方面的,例如随机访问某个下标的code unit(String.charAt())应该是O(1)操作,这只有使用UTF-16或者别的“定长”编码才可以做到。注意我这里说的“定长”特指code unit定长,而不是说code point定长。

String.getBytes()是一个用于将String的内码转换为指定的外码的方法。无参数版使用平台的默认编码作为外码,有参数版使用参数指定的编码作为外码;将String的内容用外码编码好,结果放在一个新byte[]返回。

举一例:Java标准库实现的对char与String的序列化规定使用UTF-8作为外码。Java的Class文件中的字符串常量与符号名字也都规定用UTF-8编码。这大概是当时设计者为了平衡运行时的时间效率(采用定长编码的UTF-16)与外部存储的空间效率(采用变长的UTF-8编码)而做的取舍。

延伸阅读:

什么是字节?

字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。

一个字节存储8位无符号数,储存的数值范围为0-255。如同字元一样,字节型态的变数只需要用一个位元组(8位元)的内存空间储存。

字节是二进制数据的单位。一个字节通常8位长。但是,一些老型号计算机结构使用不同的长度。为了避免混乱,在大多数国际文献中,使用词代替byte。在多数的计算机系统中,一个字节是一个8位长的数据单位,大多数的计算机用一个字节表示一个字符、数字或其他字符。一个字节也可以表示一系列二进制位。在一些计算机系统中,4 个字节代表一个字,这是计算机在执行指令时能够有效处理数据的单位。一些语言描述需要2个字节表示一个字符,这叫做双字节字符集。一些处理器能够处理双字节或单字节指令。字节通常简写为“B”,而位通常简写为小写“b”,计算机存储器的大小通常用字节来表示。

字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。Byte是从0-255的无符号类型,所以不能表示负数。

文章标题:Java语言中一个字符占几个字节,发布者:小编,转载请注明出处:https://worktile.com/kb/p/36212

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年1月30日 下午11:38
下一篇 2023年1月31日 上午12:46

相关推荐

  • 数据分析技术有哪些

    本文重点介绍了五大核心的数据分析技术:1、描述性分析、2、诊断性分析、3、预测性分析、4、规范性分析、5、机器学习与数据挖掘。描述性分析专注于总结过去的数据,以帮助了解历史趋势。诊断性分析深入挖掘数据来解释原因。预测性分析使用统计模型和机器学习技术预测未来情况。规范性分析建立在预测性分析之上,为决策…

    2023年11月21日
    46800
  • 全面实现Web3.0,需要什么

    全面实现Web3.0,需要:1、区块链技术;2、智能合约技术;3、去中心化存储技术;4、共识算法;5、去中心化身份验证;6、加密技术;7、去中心化应用程序框架。区块链是一种去中心化、不可篡改的分布式账本技术,提供一种可信任的数字资产交易和共识机制。 一、区块链技术 区块链是一种去中心化、不可篡改的分…

    2023年5月31日
    51100
  • Worktile王涛:创业那些坑很难避免,要磨练在坑里吸取营养的能力

     写在前面虽然本文中王涛坦诚地复盘了自己的一些失误,但这只是Worktile成长之路的插曲,切勿因本文选题原因导致对王涛格局与能力的误判(诚恳严肃脸)。 写在前面 文| babayage 编辑 |笑 笑 在踩坑中成长也许是一种天赋 采访当日见到王涛胳膊打着石膏,“陪孩子玩山地速降,名列前茅天初级道很…

    2022年3月20日
    1.4K00
  • JSP中的<% %>和<% =%>有什么区别

    区别只有一点:<% %> 标识里面的是jsp代码。<%=变量 %> 是 <% out.println(变量) %> 的简写方式。<% %>叫做脚本片段,其中写的内容会翻译在Servlet的Service方法中,显然可以在Service方法中定义局部变量…

    2023年2月13日
    51100
  • 免费或者开源的CRM系统有哪些

    分享7款知名CRM系统:1.zoho CRM;2.纷享销客;3.SuiteCRM;4.Odoo;5.OroCRM;6.YetiForce;7.CiviCRM。其中5款为CRM开源系统,2款为非开源CRM工具。比如Zoho CRM 是一家全球著名的客户关系管理系统,比如它连续12年入选Gartner …

    2023年10月18日
    60300
  • SQL Sever 语句大小写有什么约定规范吗

    SQLServer对大小写没有要求,从系统可读性上建议制定一些规则,例如:公共表、系统模块表命名:模块代码(首字母大字)+‘_’+具体名称(每个单词首字母大字)。规范要求并非强制性约束的代码编写行为,也不影响实际查询结果,但结构化清晰有利于排查问题。 SQLServer对大小写没有要求,从系统可读性…

    2023年5月30日
    24900
  • 敏捷管理证书有哪些

    敏捷管理证书有以下:1、PMI-ACP;2、APMG International;3、Strategyex Certificate (Associate or Master’s) in Agile;4、International Consortium for Agile (ICAgile);5、Ag…

    2022年11月16日
    1.3K00
  • jira如何实现项目管理

    JIRA实现项目管理的关键在于五点:1、项目和问题追踪,2、敏捷开发支持,3、报告和工作流自定义,4、插件和集成,5、权限和安全性管理。项目和问题追踪能力允许团队监控项目进度与问题解决情况。敏捷开发工具支持Scrum和Kanban敏捷方法论应用。工作流和报告自定性可以根据团队需要制作特定的工作流程与…

    2024年1月8日
    21000
  • devops的开发需要做什么

    开展DevOps开发围绕确保软件交付的速度与质量,使开发与运维间的壁垒得以打破。十分关键的步骤包含1、编制自动化测试脚本、2、建立持续集成/持续部署(CI/CD)流程、3、使用基础设施即代码(IaC)管理云资源、4、实践微服务架构以及容器化、5、进行持续监控与优化、6、构建反馈文化与协作机制。特别指…

    2024年3月26日
    1400
  • DevOps文化中失败的积极面

    DevOps文化认为失败是成功的前提,鼓励团队从Bug和系统中断中学习。本文将挖掘失败在DevOps文化中的积极作用,解析如何通过持续改进和实践提升团队的整体表现。核心观点包括:1、促进快速学习 2、增强系统的弹性 3、鼓励创新与冒险 4、增进团队合作与沟通 5、改善流程与工具。接下来,我们将详细探…

    2023年12月13日
    21600

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部