char和int类型相互转换

今天看到别人使用一个方法 ->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://stackoverflow.com/questions/8190517/why-char-performs-better-than-string-java看到的。 debug模式也可以看到。)
[/url]
这东西操作起来会比char慢是必然的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值