java 字节 字符,java:字节和字符

记录并分享下自己学习时的小插曲。

事情起源:java基础太次了,就打算,重新学一遍,再做做题。于是乎就碰见了这么道题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。我就写了如下所示:

7a86edcc38be

于是乎,我慌了。不应该是我AB的嘛,B呢?!!。然后又挨个试了“我”和“A”

7a86edcc38be

宝宝慌了,在我认知里,中文不是2个字节,数字和英文占1个字节的嘛。。这神马鬼!~

于是乎翻书+问度娘,结果就是:貌似是不同的编码造成的。

然后就转码测试了下,发现汉字对于gbk的话是2个,utf-8的话是3个,utf-16的话是4个。这个就不上图了,后续给个gitHub的地址,如果有小伙伴对测试过程有兴趣的话可以看看。

然后根据这个就想到了char。接着,做了下char的测试。因为一开始大一学C语言的时候,我记得char是1个字节。结果控制台输出的是:2个字节。后来翻看了java核心技术卷一这本书,说:在java中,char数据类型是一个采用UTF-16编码表示Unicode码点的代码单元。java为了在不同机器上运行,忽视机器自身处理器位数,内部做的统一处理。所以说对于java来说,char占2个字节。

原来这道编程题编写的的隐藏条件是得用GBK或者其他占2字节的编码表示才能出正确结果,这是真正考察的重点。还是太年轻了。

这个记录一下,努力打好基础,争取早日从小白变成菜鸟!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值