课后作业小结

Java学习动手问题整理

最近跟着老师学Java基础,遇到了不少需要动手验证的小问题,整理了几个印象深的,记录下我的思考和结果,方便以后复习。

一、枚举类型怎么用?

老师让看EnumTest.java,我自己写了个简单例子试了试:

// 定义枚举类型
enum Size {SMALL, MEDIUM, LARGE}
public class EnumTest {
    public static void main(String[] args) {
        Size s1 = Size.SMALL;
        Size s2 = Size.valueOf("SMALL");
        // 比较两个枚举值
        System.out.println(s1 == s2); // 输出true
        // 遍历所有枚举值
        for (Size size : Size.values()) {
            System.out.println(size);
        }
    }
}

运行后发现,相同的枚举值其实是同一个对象,用“==”就能比较。而且还能通过values()方法遍历所有枚举选项,这点还挺方便的。

二、double计算为啥不精确?

老师给的TestDouble.java代码,运行结果跟我想的不一样:

public class TestDouble {
    public static void main(String[] args) {
        System.out.println(0.05 + 0.01); // 结果是0.060000000000000005
        System.out.println(1.0 - 0.42); // 结果是0.5800000000000001
    }
}

查了资料才明白,double用二进制存储,有些十进制小数没法精确表示,只能存近似值。后来用BigDecimal解决了,要注意用字符串当参数:

import java.math.BigDecimal;
public class TestBigDecimal {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("0.05");
        BigDecimal b = new BigDecimal("0.01");
        System.out.println(a.add(b)); // 正确输出0.06
    }
}

三、字符串拼接的小陷阱

下面两段代码,一开始以为结果差不多,实际差很多:

public class StringAddTest {
    public static void main(String[] args) {
        int x = 100, y = 200;
        System.out.println("x+y=" + x + y); // 输出x+y=100200
        System.out.println(x + y + "=x+y"); // 输出300=x+y
    }
}

琢磨了半天,原来“+”遇到字符串就会变成连接操作,而且是从左往右算。第一段先把“x+y=”和x连起来,再连y;第二段先算x+y的和,再跟字符串连接,难怪结果不一样。

四、同名变量谁生效?

看到一段代码,里面有两个叫value的变量:

public class VariableTest {
    private static int value = 1;
    public static void main(String[] args) {
        int value = 2;
        System.out.println(value); // 输出2
    }
}

运行后输出2,不是1。原来局部变量会“盖住”外面的变量,要是想访问外面的,得用特殊方式,比如静态变量用类名,成员变量用this(不过这个例子里是静态的,暂时还没完全搞懂this的用法,后续再学)。

posted @ 2025-09-27 23:22  白底纸板  阅读(8)  评论(0)    收藏  举报