Java基础重中之重

    技术2025-10-07  8

    Java基础注意点、易错点

    一、Java基本数据类型的转换,请看题。

    请问如下语句是否正确?

    byte b = 1000;

    错误,正确写法为byte b = (byte)1000;

    解释:

    ​ Java整型数据默认是int类型,所以1000是int类型,当把int类型赋值给byte类型必须类型的强制转换。

    byte b = (byte)12;

    错误,该语句其实编译与运行没有任何错误,只是完全可以将强制类型转省略。正确写法为byte b = 12;

    解释:

    ​ 虽然Java整数类型默认是int类型,但 12 在 byte 类型的范围之内,所以Java虚拟机会给我们进行类型的自动转换,所以我们不需要书写强制类型转换。

    注意:

    ​ 以上的特性适用于 byte、short 、char。

    1、2两题的实例图

    byte b1 = 10; byte b2 = 12; byte b3 = b1+b2;

    错误:正确写法byte b3 = (byte)(b1+b2);

    解释:

    ​ byte、short、char 只要进行变量的运算就会转换为int类型,所以计算所得的结果必定是int类型,所以必须强制类型转换。

    注意:

    ​ 以上特性byte、short、char 都适用。

    3题实例图

    二、三元运算符中的类型转换

    ​ 1、请问下列程序输出的结果是

    public static void main(String[] args) { int a = 10; double b = 13; System.out.println(b > a ? a : b); }

    正确答案:10.0

    解析:

    ​ 很多人可能第一时间认为输出结果为10。但这里必须注意,三元运算符是一种运算符,就像加减乘除的运算一样,如果参与运算的数据类型不一致,会进行数据类型的转换,返回的结果也一定是转换后的数据类型。所以这里会将a自动转换为double类型的值,返回的结果必定是double类型的。

    三元运算的注意点

    三元运算符是一种运算符,所以一定有运算结果参与三元运算的两个变量,数据类型时必须一致或者能够自动转换为同类型数据。

    程序实例图

    三、Arrays工具类中的copyof函数

    解释:Arrays工具类中的copyof函数是一个复制数组的函数,用来得到和现有数组一模一样的数组副本。

    1、请问下面程序输出的结果?

    class User{ private String name; private int age; public User(String name, int age) { super(); this.name = name; this.age = age; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } } public class MyTest { public static void main(String[] args) { int[] nums = {1,2,3}; int[] copyNums= Arrays.copyOf(nums, 3); copyNums[0] = 1000; System.out.println(nums[0]); User[] users = new User[2]; users[0] = new User("小明", 20); users[1] = new User("小红", 18); User[] copyUsers = Arrays.copyOf(users, 2); copyUsers[0].setName("小黄"); System.out.println(users[0]); } }

    正确答案:

    ​ 1

    ​ User [name=小黄, age=20]

    解释:

    ​ 由Java API 可知,Arrays.copyof()将会得到现有数组得到一个副本。

    ​ 所以对于nums数组来说,copyNums数组只是一个副本,所以修改copyNums数组不会对nums数组有任何影响,所以输出结果为1。

    ​ 那么为何copyUsers的元素时,导致users数组的元素被修改呢?,请看内存分析图!

    1、nums(数组元素为基本类型)复制过程的内存图

    解释:

    ​ 复制的过程就是将原数组中每个元素的值复制到新数组中。

    2、users(数组元素的值为引用类型)复制过程

    解释:

    ​ 复制的过程就是将原数组中每个元素的值复制到新数组中,但此时复制得到的是引用对象的地址值,所以有得到新数组元素依然指向原来的对象。

    Processed: 0.010, SQL: 9