9.29学习总结

(1)今日安排
完成部分课后作业
(2)动手动脑
Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识。
解答:在函数里面的赋值优先于在函数外赋值,属于局部变量。函数外的赋值可以赋给类中的多个函数,属于全局变量。如果函数里面没有重复的赋值,那么函数的值为函数外的。
看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?

 

解答:自动类型转换是安全的,强制类型转换时,可能会引起信息的损失。实线代表无精度损失,虚线代表有精度损失,一般来说在实线两端都是由低精度指向高精度的类型,所占的位数从低到高,范围从小到大,所以可得出,低精度向高精度转化不丢失精度,反之,从高精度传向低精度则会损失。
请运行以下代码(TestDouble.java),你看到了什么样的输出,意外吗?

import java.util.Scanner;

public class TestDouble {

    public static void main(String args[]) {

        System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));

        System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));

        System.out.println("4.015 * 100 = " + (4.015 * 100));

        System.out.println("123.3 / 100 = " + (123.3 / 100));

    }

}

结果截屏如下:

解答:意外,使用double类型的数值进行计算,结果是不精确的。
为什么double类型的数值进行运算得不到“数学上精确”的结果?
解答:Double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差,简单地说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来,而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。
以下代码的输出结果是什么?为什么会有这样的输出结果?

int X=100;
        int Y=200;
        System.out.println("X+Y="+X+Y);
        System.out.println(X+Y+"=X+Y");

结果截屏如下:

解答:在System.out.println()中,如果在string字符串后面是+和变量,会把变量转换成string类型,加号起连接作用,然后把两个字符串连接成一个新的字符串输出;如果先有变量的加减运算再有字符串,那么会从左到右先计算变量的加减,然后再与后面的string结合成一个新的字符串。也就是说加号只有在两个string类型或者其中一个是string类型的时候才起到连接作用,否则仍然是运算符。

posted @ 2021-09-29 21:22  今天又双叒叕在敲代码  阅读(40)  评论(0编辑  收藏  举报