zoukankan      html  css  js  c++  java
  • Java

    题目

    public class Test {
    
        public static void main(final String[] args) {
            final int a = 10;
            final int b = 20;
            System.out.println(a + '+' + b + '=' + (a + b));
        }
    }
    

    乍一看,可能有的同学会觉得很简单,直接给出如下答案:

    10+20=30
    

    其实这是道陷进题,很容易就看混了,正确的答案是:

    164
    

    分析

    为什么答案会是164

    这是因为这里并不是字符串拼接,而是整型与字符类型的加法运算。

    用一对单引号'包括起来的是字符,用一对双引号"包括起来的是字符串。

    对于字符串来说,用+拼接起来的结果还是字符串。但这道题中,用+拼接起来的是整型和字符类型,就变成了单纯的加法运算。在加法运算中,数据类型会从低位自动转换成高位,因为高位转低位会有数据溢出导致丢失精度的风险。

    当整型与字符类型相加时,字符类型会转换成整型,也就是转换成对应的ASCII码值。于是乎,a + '+' + b + '=' + (a + b)就变成了10 + 43 + 20 + 61 + (10 + 20),其运算结果就是164

    题目变形

    其一

    public class Test {
    
        public static void main(final String[] args) {
            final int a = 10;
            final int b = 20;
            System.out.println(a + "+" + b + "=" + (a + b));
        }
    }
    

    这道题的答案就是10+20=30了。

    其二

    public class Test {
    
        public static void main(final String[] args) {
            System.out.println('A');
            System.out.println((int)'A');
        }
    }
    

    这道题的答案是:

    A
    65
    

    如果我们想知道某个字符对应的ASCII码是多少,可以将其转换成整型,这个值就是其ASCII码值。

  • 相关阅读:
    mysql查询太慢,我们如何进行性能优化?
    详解MySQL事务原理
    精通MySQL之锁篇
    精通MySQL之索引篇,这篇注重练习!
    mysql数据结构及mvcc
    mysql-主从同步
    redis分布式锁
    售后系统构建和商品状态重构经验与总结
    【更新2021-4-25】如何处理PoshSSH 连接主机时的"New-SSHSession : Key exchange negotiation failed."故障
    计算几何---大牛们
  • 原文地址:https://www.cnblogs.com/yulinlewis/p/10847494.html
Copyright © 2011-2022 走看看