Java基础重中之重

Java基础注意点、易错点

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

请问如下语句是否正确?

  1. byte b = 1000;
    

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

    解释:

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

  2. byte b = (byte)12;
    

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

    解释:

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

    注意:

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

    1、2两题的实例图

在这里插入图片描述

  1. 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类型的。

三元运算的注意点

  1. 三元运算符是一种运算符,所以一定有运算结果
  2. 参与三元运算的两个变量,数据类型时必须一致或者能够自动转换为同类型数据。
    在这里插入图片描述

程序实例图

在这里插入图片描述

三、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(数组元素的值为引用类型)复制过程

在这里插入图片描述

解释:

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值