java9为何要将string的底层成功由char[]改成了byte[]?
本文目录导航:
- java9为何要将string的底层成功由char[]改成了byte[]?
- java.lang.String.String(byte[]>java 里String 转成byte【】数组,String a = "5317",转换成的byte【】={5,3,1,7}。谢谢了
java9为何要将string的底层成功由char[]改成了byte[]?
Java9为何将String底层成功由char[]改至byte[]?String在JDK9之前,经常使用UTF-16编码并以char数组存储,每个char字符需两个字节存储空间。
每个byte字符只有一个字节,但思考兼容性,一切字符均经常使用双字节存储。
从JDK9起,String会判别字符串能否全为ASCII字符。
若全为ASCII字符,则以拉丁字符集编码,每个字符仅需一字节存储。
若蕴含非ASCII字符,则驳回UTF-16编码,每个字符占用两字节。
以abc为例,全为ASCII字符,因此存储仅需三字节。
而哈A蕴含非ASCII字符,将占用六字节。
在Java程序中,String理论占据最大堆空间,且少量String仅由ASCII字符导致。
JDK9更改后,可节俭少量内存,缩小渣滓回收(GC)次数,优化效率。
综上,Java9将String底层成功由char[]改为byte[],旨在优化内存经常使用与优化功能。
java.lang.String.String(byte[]>java 里String 转成byte【】数组,String a = "5317",转换成的byte【】={5,3,1,7}。谢谢了
String a = 5317;byte[] b = new byte[()];for( int i=0 ; i<() ; i++ ){ b[i] = (byte)((byte)(i)-48);}//这段代码宿愿对你有协助.不过字符串中只能是数字哦.