java中char与汉字占用字节个数问题

一直都是糊里糊涂的在用,始终没有搞清楚汉字在java中占用字节个数的问题,每次都是逃避着过去了。今天一个字节编码问题让我不得不去重新认识char与汉字编码这个问题。

 

下面是引用一个讨论中的资料:

 

http://www.iteye.com/topic/47740 写道
(由于原作者将字节和位写混淆了,引用时我已做过更改)

貌似一个简单的问题(也许还真是简单的)但是却把曾经自认为弄清楚的我弄得莫名其
妙

char在Java中应该是16个bit
byte在Java中应该是8个bit
char x = '编'; //这样是合法的,输出也是16个bit

但是
String str = "编";
byte[] bytes = str.getBytes(); //我想不明白,为什么这里要占用3个byte呢?
3个byte一共是3*8=24个bit,那么char x怎么又放得下?我坚信char是16个bit,
但是str.getBytes()这个东西到底又怎么回事?

不好意思,表达有点乱,但是的确太奇怪了。希望大家能指点一下。
 skydream 写道
首先,java中的一个char的确是2个字节。java采用unicode,2个字节来表示一个字符。

其次,楼主你说的byte[] bytes = str.getBytes();之后是3个字节,这里和前面的概念不一样。java是用unicode来表示字符,"编"这个中文字符的unicode就是2个字节。String.getBytes(encoding)方法是获取指定编码的byte数组表示,通常gbk/gb2312是2个字节,utf-8是3个字节。如果不指定encoding则取系统默认的encoding.

 kdekid 写道

首先,要搞清楚 code point 和 encoding 的区别。Java 是遵循 unicode 4.0 标准的,而内部的 character 以 utf-16 作为 encoding。unicode 4.0 标准包含从 U+0000-U+FFFF 的基本多语言平面和 U+10000-U+10FFFF 的扩展平面的文字,这是 code point。Java 的 char 类型是 16 bit 的,所以单个 char 只支持基本平面内的文字,而扩展平面的文字是由一对 char 来表示的。

而 String.getBytes() 这个方法是按照指定的 encoding 返回字符串,一般中文系统的默认编码是 utf-8 (linux, mac) 或者 gbk/gb18030 (windows)。只要是基本平面内的文字,utf-8码的中文都是3字节的,而 gbk/gbk18030 是2字节的。
 
单细胞转录组分析(scRNA-seq) 单细胞转录组测序(Single-cell RNA sequencing,scRNA-seq)是一种高通量测序技术,可以在单细胞水平解析基因表达情况,揭示细胞异质性,探索稀有细胞类型,并研究细胞状态转换及动态调控机制。与传统的。 阅读详情

相关推荐

模仿学习(Imitation Learning)概述

什么是模仿学习呢?简单来说,模仿学习(Imitation Learning),就是要训练机器能够复制人类的连续动作,进而达到模仿的目的。其实,Imitation Learning的实用性很高,假设今天有一个训练场景,你不知道该怎么定奖励值(reward),但是你可以收集到专家的示范数据(expert demonstration data),你就可以考虑用Imitation Learning这个方法。因此,模仿学习也被寄予很高的期待,成为下一代强人工智能的关键技术。......

qq_22749225的博客 2万+

java中的char类型在表示中文时占几个字节

看了一些文章包括官方文档说法,都是说java的char类型是双字节长的,可是下边的测试结果怎么解释?我的JVM编译环境是UTF-8. https://www.cnblogs.com/softidea/p/10271219.html package generic.primitivetype; import org.junit.Test; /** * @Author: Tom * @Date: 2021年1月7日 下午4:17:23 * @Version: 1.0 * @Descriptio

Tom098的博客 330

记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL

【代码】记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL。

m0_74824002的博客 842

java char=9为什么可以_java的char类型,只有两个字节,为什么可以存储汉字?java中 char详解...

我自己出了一道面试题,如下:public static voidmain(String[] args) {char a = ‘9‘;char b = 9;char c = ‘我‘;System.out.println(Integer.valueOf(c));//输出为 25105}请根据本页面右侧编码资料(ASCII码),回答以上Java代码【运行】后,a,b,c 依次在内存中 如何 存储的?这道...

weixin_29009669的博客 496

DDR5内存命令真值表详解:如何正确解析JESD79-5标准中的关键指令

本文深度解析JESD79-5标准中的DDR5内存命令真值表,将其视为动态通信协议进行拆解。详细阐述了1-Cycle与2-Cycle命令的区别、Bank Group寻址机制以及模式寄存器(MR)操作流程,为硬件与固件工程师提供了从信号解析到系统调试的完整实战指南,是理解和优化高性能计算平台内存子系统的核心。

numpy6sculptor的博客 548

微信小程序开发:实现地图导航功能

其中,id用于调用地图组件,latitude和longitude表示地图的中心点坐标,markers表示地图中的标记点,covers表示地图中的覆盖物,polyline表示地图中的折线图,show-location表示是否显示当前定位点,bindregionchange表示移动地图时触发的事件。其中,id表示标记点的唯一标识,latitude和longitude表示标记点的坐标,title表示标记点的名称,iconPath表示标记点的图标路径,width和height表示标记点的宽度和高度。

吃不胖. 8917

java 汉字 char_java中char与汉字占用字节个数问题

一直都是糊里糊涂的在用,始终没有搞清楚汉字在java中占用字节个数的问题,每次都是逃避着过去了。今天一个字节编码问题让我不得不去重新认识char与汉字编码这个问题。下面是引用一个讨论中的资料:http://www.iteye.com/topic/47740 写道(由于原作者将字节和位写混淆了,引用时我已做过更改)貌似一个简单的问题(也许还真是简单的)但是却把曾经自认为弄清楚的我弄得莫名其妙char...

weixin_35051558的博客 393

DAMMFND: Domain-Aware Multimodal Multi-view Fake News Detection

虚假新闻的泛滥不仅严重阻碍了互联网社交媒体的健康发展,还在政治、经济和社会层面造成了实际危害,凸显了自动化虚假新闻检测的重要性(Zhou 等,2015;Cui 等,2019;Zhu 等,2022a;Li 等,2024c,b,a)。现有的虚假新闻检测方法通常聚焦于特定领域的新闻,例如健康或政治领域。然而,在现实世界中,社交媒体上的新闻往往跨越多个领域,这就要求现有的虚假新闻检测方法必须考虑多域泛化(Nan 等,2021;Qi 等,2019;Zhu 等,2022b)。

qq_52053775的博客 337

中文汉字存入char数组

准备知识: 1、在中文windows操作系统下,中文默认是采用GBK字符集,每个字符占16bit(2字节)。 2、C语言规定char类型的具体实现至少8bit。一般gcc等编译器都将char类型实现为8bit(1字节)。 答案: 所以在中文Windows下,一般使用C语言的内置char类型的数组,就可以存储中文了。比如char[2]可以存储一个中文。 1 2 ...

唐伯虎777的专栏 1万+

29、机器人动力学中的欧拉 - 拉格朗日与哈密顿力学

本文深入探讨了机器人动力学中的欧拉-拉格朗日与哈密顿力学框架,涵盖向量流形上的辛结构、哈密顿方程的几何代数表述、泊松括号与积分不变量等核心概念。文章详细推导了机电系统中拉格朗日量与哈密顿量的构建方法,并结合牛顿-欧拉算法给出了局部哈密顿量和动量导数的迭代计算流程,适用于多关节机器人的动力学建模与控制设计。通过应用案例展示了理论在双关节机器人手臂中的实际运用,最后展望了其在优化控制、鲁棒性提升及智能融合方向的潜力。

perl8的博客 129

OpenMVS :用 colmap制作自己的数据集 重建(用colmap计算位姿,将位姿转为MVS需要的格式)

数据集制作主要是在windows进行,比较方便。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3325

为啥在java中不要使用char类型

背景  最近项目中遇到一个问题,反复测试才发现问题出在了数据库中,由于使用了 Hibernate 这种ORM框架,因此,在java中写的 EntityBean 就可以直接通过ORM映射到Oracle数据库了,这也导致了很多的问题。当然,查了很多的资料,最终解决了这个问题,并且对Oracle的数据类型也有了一个更深层次的理解。下面是我的译文(原文是英文版的)。  译文  要

紫羽风的博客 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

char[] 和 String 类型占用字节大小问题

在 C 语言中 1、char a[10] = {“China”} 中,这个 a 占用多少字节? 答:占用 10 个字节。 解析:上面代码对 a 做了赋值的操作, a[0]=‘C’ ,a[1]=‘h’ ,a[2]=‘i’ ,a[3]=‘n’ ,a[4]=‘a’ ,a[5]=’\0’,a[6]=’\0’,a[7]=’\0’,a[8]=’\0’,a[9]=’\0’ 所以,它占用的是 10 个字节。 2、...

weixin_43893935的博客 4870

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

关于java中char占几个字节,汉字占几个字节

我们平常说,java中char占2个字节,可又说汉字在不通的编码格式中所占的位数是不同的,比如gbk中汉字占2个字节,utf8中多数占3个字节,少数占4个。而所有汉字在java程序中我们都可以简单的用 char c = '字' 表示; 那么问题来了,在java程序运行的时候,究竟汉字占几个字节呢? -------------------------- 文章抄袭自:http://www...

afz8572的博客 1710

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java中char是几个字节_关于java中char占几个字节,汉字占几个字节

我们平常说,java中char占2个字节,可又说汉字在不通的编码格式中所占的位数是不同的,比如gbk中汉字占2个字节,utf8中多数占3个字节,少数占4个。而所有汉字在java程序中我们都可以简单的用 char c = '字' 表示; 那么问题来了,在java程序运行的时候,究竟汉字占几个字节呢?--------------------------在讨论这个问题之前,我们需要先区分unicode和...

weixin_42301008的博客 1335

【Java】为什么char占两个字符却能存汉字

问题:Java的char占两个字节,而汉字的UTF-8编码需要至少三个字节,为什么char可以存储汉字? 参考:https://blog.youkuaiyun.com/u010297957/article/details/48495791 Unicode 字符集起源ASCII(American Standard Code for Information Interchange,美国标准信息交换代码),这是个单字节编码表,它能最多能表示256个字符(但实际上只用了7bit,128个。ISO8859-1使用8bit来表示

Java否极泰来 2216

问题:Java中,char型变量中能不能存储一个中文汉字,为什么?

为什么? char型变量是用来存储Unicode编码的字符的,unicode 编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字。 不过,如果某个特殊的汉字没有被包含在 unicode 编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。 说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。 package java基础题目; ...

Future_LL的博客 3822

char可以存储汉字吗?| Java基础

在Java中一共有8种基本类型,其中有4种整型、2中浮点类型、一种用于表示Unicode的字符单元的字符类型char和一种用于表示真值的boolean类型。 int : 占4字节,取值范围:-214

hdtopku 1万+

Java 为什么占两个字节的char

Java 为什么占两个字节的char Java语言内部存储采用的是Unicode编码,Unicode编码中的每个字符占两个字节,中文也是占两个字节,所以,Java中的字符可以存储一个中文汉字。 1、而在不同的编码方式中,中文所占的字节数是不同的: ① ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。 ② UTF-8编码中,一个英文字符等于一个字节,一个中文(

weixin_45990065的博客 3162

一个汉字到底占几个字节?

编码/场景一个汉字占用的字节数备注GBK2 字节Windows 简体中文默认 ANSI 编码,历史遗留广泛UTF-83 字节(常用汉字)现代 Web、数据库、跨平台首选编码UTF-162 或 4 字节Java char 使用,大部分常用汉字为 2 字节UTF-324 字节定长编码,极少直接使用一个汉字到底占几个字节?2 字节、3 字节,甚至 4 字节都有可能,全看你用什么编码。

997

.length()方法返回的是char的数量,而不是字节数

.length()方法返回的是char的数量,而不是字节数

2301_77118121的博客 1122

字节与字符及java中char与数据库中char的区别

最近工作遇到字节与字符,就有认真总结了一下。 1.字节     字节是计算机信息科技用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。 1个等于字节是8个bit位每个bit位又0/1两种状态也就是说一个字节可以表示256个状态,计算机里用字节来作为最基本的存储 单位。一般来说,英文状态下一个字母或数字(称之为字符)占用一个字节,一个汉字用两个字

rsln_lg的博客 3743

java char大小_java char占用多少字节?

在java中,char占用2个字节。Java中,只要是字符,不管是数字还是英文还是汉字,都占两个字节。原因:Java编译器默认使用Unicode编码,因此2字节可以表示所有字符。相关推荐:《Java视频教程》1:“字节”是byte,“位”是bit ;2: 1 byte = 8 bit ;char在java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。例子代码如下:pu...

weixin_35980523的博客 1598

Java中,char型变量中能不能存储一个中文汉字,为什么?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

qf361的博客 1256

char几个字节java_java中char占几个字节?

java中char占几个字节?java中的一个char占用2个字节。java采用unicode,2个字节来表示一个字符。 一个数字或英文或汉字都是一个字符,只不过数字和英文时,存储的2个字节的第一个字节都为0,就是浪费了点空间。存汉字就占满了2个字节。1:“字节”是byte,“位”是bit ;2: 1 byte = 8 bit ;例子代码如下:public class Test {public s...

weixin_28192383的博客 4296

java string 字节_Java中char[] 和 String 类型占用字节大小问题

作者:威威喵 原文链接:https://blog.youkuaiyun.com/smile_Running/article/details/87211916在 C 语言中1、char a[10] = {"China"} 中,这个 a 占用多少字节?答:占用 10 个字节。解析:上面代码对 a 做了赋值的操作,a[0]='C' ,a[1]='h' ,a[2]='i' ,a[3]='n' ,a[4]='a' ,a...

weixin_39906499的博客 153
上一篇: xml与java对象映射
下一篇: 字符集与字符编码问题
maimode
博客等级 码龄19年 11粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值