您的位置:首页 > 其它

这个结果为什么不是HaHa

2009-03-14 23:50 218 查看
public class FF extends TestCase {
    public void testName() throws Exception {
        System.out.print("H" + "a");
        System.out.print('H' + 'a');
    }
}
你可能会认为这个程式将列印HaHa。该程式看起来好像是用两种方式连接了H和a,但是你所见为虚。如果你运行这个程式,就会发现它列印的是Ha169。那么,为什么它会产生这样的行为呢?
正如我们所期望的,第一个对System.out.print的调用列印的是Ha:它的参数是运算式"H"+"a",显然它执行的是一个字元串连接。而第二个对System.out.print的调用就是另外一回事了。问题在于'H'和'a'是字元型字面常量,因为这两个运算元都不是字串类型的,所以+操作符执行的是加法而不是字元串连接。
编译器在计算常量运算式'H'+'a'时,是通过我们熟知的拓宽原始类型转换将两个具有字元型数值的运算元('H'和'a')提升为int数值而实现的。从char到int的拓宽原始类型转换是将16位的char数值零扩展到32位的int。对于'H',char数值是72,而对于'a',char数值是97,因此运算式'H'+'a'等价于int常量72 + 97,或169。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐