java解惑部分好题~~

废话不多说,直接上题目
接下来就是见证奇迹的时刻:请先不要运行代码,猜一下输出的结果:
1.
public class Test1{
    public static void main(String[] args){
        System.out.println(2.0 - 1.1);
    }
}

2.
public class Test2{
    public static void main(String[] args){
        System.out.println(12345 + 5432l);
    }
}

3.
public class Test3{
    public static void main(String[] args){
        char x = 'X';
        int i = 0;
        System.out.println(true ? x : 0);
        System.out.println(false ? i : x);
    }
}

4.
public class Test4{
    public static void main(String[] args){
        System.out.println("H" + "a");
        System.out.println('H' + 'a');
    }
}

5.
public class Test5{
    public static void main(String[] args){
        ///u0022是双引号的转义
        System.out.println("a/u0022.length() + /u0022b".length());
    }
    }
}

6.
public class Test6{
    public static void main(String[] args){
        //Here:/u
        System.out.println("hello");
    }
}

7.
public class Test7{
    public static void main(String[] args){
        System.out.print("Hello ");
        http://www.google.com
        System.out.println("world");
    }
}

//解惑

 

1.

public class Test1{

    public static void main(String[] args){

        System.out.println(2.0 - 1.1);

    }

}

问题在于1.1这个数字不能被精确的表示为一个double,因此被表示为最接近它的doubl
e值,更一般的说,问题在于并不是所有的小数都可以用二进制浮点数表示。

所以在要求精确答案的地方要避免使用flaot和double,对于货币计算等尽量使用int,
long,BigDecimal。

2.

public class Test2{

    public static void main(String[] args){

        System.out.println(12345 + 5432l);

    }

}

这题纯属娱乐···顺便给大家提个醒。

在写lang的时候最好用5432L

3.

public class Test3{

    public static void main(String[] args){

        char x = 'X';

        int i = 0;

        System.out.println(true ? x : 0);

        System.out.println(false ? i : x);

    }

}

这里牵扯到混合类型的计算,变量x被进行了二进制数字提升,有兴趣的童鞋可以搜一下

所以,通常最好是在条件表达式中使用类型相同的第二好第三操作数。

4.

public class Test4{

    public static void main(String[] args){

        System.out.println("H" + "a");

        System.out.println('H' + 'a');

    }

}

这个应该比较简单,字符时作为整形存储的,在运算环境下自动转换

5.

public class Test5{

    public static void main(String[] args){

        ///u0022是双引号的转义

        System.out.println("a/u0022.length() + /u0022b".length());

    }

}

因为“/u0022”是双引号的转义,而Java在对字符串字面常量中的Unicode转义字符没有
提供任何特殊处理。

编译器在将程序解析成各种字符之前,先将Unicode字符转换成它们所表示的字符。

所以上面的输出语句等价于:

System.out.println("a".length() + "b".length());

6.

public class Test6{

    public static void main(String[] args){

        //Here:/u

        System.out.println("hello");

    }

}

/Unicode转义字符必须是良构的,即使出现在注释中也是如此。即/u后面必须跟着四个
十六进制数.

7.

public class Test7{

    public static void main(String[] args){

        System.out.print("Hello ");

        http://www.google.com

        System.out.println("world");

    }

}

这个就是label(标号)的问题了```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值