`

char和int类型相互转换

阅读更多
今天看到别人使用一个方法 ->String.indexOf(int ch),
然后被Sonar提示说String.indexOf(char) is faster than String.indexOf(String).

我想去测试一下是不是这样, 结果写的时候发现String.indexOf只有两种参数格式,如下:




这里没有显示char类型参数。

但是测试了一下确实是可以的。

于是研究了一下,有了以下代码:


char c1='a';
int i1=97;
System.out.println(c1==i1);  //true

char c=97;
System.out.println("c= "+c );  //a
System.out.println((int)c);    //97


int a='a';
System.out.println((int)a);   //97


这些其实都是JVM自己进行转换的,和JDK无关。 通过debug模式是无法看到这一转换过程的。



至于为什么char比String速度快,原因很简单。
一方面是char类型的东西都被直接存储到了虚拟机的栈内存中,提取很快。
另一方面,String这个东西本质上是一个引用对象,数据应该是在堆内存吧(这块不太清楚)。
它包含了几个元素:
A character array    ->一个char数组
An integral offset    ->一个整数值表示起始(offset)
An integral character count    ->一个整数表示char数量
An integral hash value          ->一个整数哈希值
(这个在[url]http://stackoverflow.com/questions/8190517/why-char-performs-better-than-string-java看到的。 debug模式也可以看到。)
[/url]
这东西操作起来会比char慢是必然的。



  • 大小: 15.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics