一个字符串中到底能有多少个字符?我竟然算错了

Java的char类型使用UTF-16编码,可能导致长度误解。String.length()返回的是Unicode代码单元长度,对于扩展字符可能为传统字符长度的两倍。UTF-16通过代理对处理扩展平面字符,避免与BMP平面冲突。
摘要由CSDN通过智能技术生成

依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 \\u0000 (0),最大值是\\uffff(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个字符?

char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\\u0000' (or 0) and a maximum value of '\\uffff' (or 65,535 inclusive).

from The Java™ Tutorials

首先,让我们先看个例子:

一个字符串中到底能有多少个字符?我竟然算错了

运行这个程序,你觉得输出结果是什么?

输出结果:

 

我们知道, String.getBytes()如果不指定编码格式,Java会使用操作系统的编码格式得到字节数组,在我的MacOS中,默认使用UTF-8作为字符编码(locale命令可以查看操作系统的编码),所以在我的机器运行,String.getBytes()会返回UTF-8编码的字节数组。

  • String.length返回Unicode code units的长度。
  • String.toCharArra
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值