小弟刚开始学 Java,了解到 Java 没有操作符重载 所以使用+操作符对两个类进行相加应该是做不到的
于是对这段代码不是很理解了
class Integer {
private int value;
public Integer(int value) {
this.value = value;
}
public int intValue() {
return this.value;
}
public static Integer valueOf(int i) {
return new Integer(i);
}
}
public class Main {
public static void main(String[] argv)
{
java.lang.Integer zz = 1;
java.lang.Integer xx = 2; //调用 java.lang.Integer.valueOf(2),返回 java.lang.Integer.Integer 类型
java.lang.Integer aa = zz + xx; //zz + xx 是如何实现的?
System.out.printf("%s\n", aa); //printf 的时候可以直接把 aa 打印出来,这又是怎么做到的?
//Integer a = 1; //Type mismatch: cannot convert from int to Integer
//Integer x = Integer.valueOf(1);
//Integer y = Integer.valueOf(2);
//Integer z = x + y; //The operator + is undefined for the argument type(s) Integer, Integer
//请问如何自己实现 x+y?
//System.out.printf("%s\n", z); //似乎打印了地址, Integer@6d03e736
}
}
尝试用了断点的方式,发现 zz + xx 似乎会进入两次 java.lang.Integer.intValue 函数
也就是说 zz 调用了 java.lang.Integer.intValue,返回了 int 类型的 1
xx 返回了 int 类型的 2
然后进入了 java.lang.Integer.valueOf(3)
printf 的时候可以直接把 aa 打印出来
问题
不知道用什么关键词搜索这些问题
1
yuanmomo 2021-04-03 06:12:30 +08:00 via iPhone 1
1 Java 里面自动装箱,会自动把基本类型转换成包装类型
2 Java 里面的自动拆箱,会自动把包装类型转换为基本类型。 3 %s 表示打印成字符串,会自动调用 tostring 方法,将这个对象转换成字符串。 |