欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

char和int类型相互转换

程序员文章站 2022-03-08 14:36:54
...
今天看到别人使用一个方法 ->String.indexOf(int ch),
然后被Sonar提示说String.indexOf(char) is faster than String.indexOf(String).

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


[img]http://dl2.iteye.com/upload/attachment/0092/0358/c1230c35-8f47-35bf-9efe-e27458b88be2.jpg[/img]

这里没有显示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://*.com/questions/8190517/why-char-performs-better-than-string-java看到的。 debug模式也可以看到。)
[/url]
这东西操作起来会比char慢是必然的。
相关标签: javase