点击上方 Java后端,选择 设为星标
优质文章,及时送达
什么是自动装箱拆箱?很简单,下面两句代码就可以看到装箱和拆箱过程
//自动装箱
Integer total =
99;
//自动拆箱
int totalprim = total;
public
class Main {
public static void main(String[] args) {
//自动装箱
Integer total =
99;
//自定拆箱
int totalprim = total;
}
}
private
final
int value;
public Integer(int value) {
this.value = value;
}
public Integer(String string) throws NumberFormatException {
this(parseInt(string));
}
1
private
static
final Integer[] SMALL_VALUES =
new Integer[
256];
@Override
public int intValue() {
return value;
}
相关问题
2、i < 128 && i >= -128 =====> SMALL_VALUES[i + 128]
private
static
final Integer[] SMALL_VALUES =
new Integer[
256];
public
class Main {
public static void main(String[] args) {
Integer i1 =
100;
Integer i2 =
100;
Integer i3 =
200;
Integer i4 =
200;
System.out.println(i1==i2);
//true
System.out.println(i3==i4);
//false
}
}
public
class Main {
public static void main(String[] args) {
Double i1 =
100.0;
Double i2 =
100.0;
Double i3 =
200.0;
Double i4 =
200.0;
System.out.println(i1==i2);
//false
System.out.println(i3==i4);
//false
}
}
总结一句就是:在某个范围内的整型数值的个数是有限的,而浮点数却不是。
public static Double valueOf(double d) {
return
new Double(d);
}
Integer 派别:Integer、Short、Byte、Character、Long 这几个类的 valueOf 方法的实现是类似的。
Double 派别:Double、Float 的 valueOf 方法的实现是类似的。每次都返回不同的对象。
public
class Main {
public static void main(String[] args) {
Boolean i1 =
false;
Boolean i2 =
false;
Boolean i3 =
true;
Boolean i4 =
true;
System.out.println(i1==i2);
//true
System.out.println(i3==i4);
//true
}
}
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
public
static
final Boolean TRUE =
new Boolean(
true);
public
static
final Boolean FALSE =
new Boolean(
false);
Integer num1 =
400;
int num2 =
400;
System.out.println(num1 == num2);
//true
// 说明num1 == num2进行了拆箱操作
Integer num1 =
100;
int num2 =
100;
System.out.println(num1.equals(num2));
//true
@Override
public boolean equals(Object o) {
return (o
instanceof Integer) && (((Integer) o).value == value);
}
Integer num1 =
100;
int num2 =
100;
Long num3 =
200l;
System.out.println(num1 + num2);
//200
System.out.println(num3 == (num1 + num2));
//true
System.out.println(num3.equals(num1 + num2));
//false
2、对于 num3.equals(num1 + num2) 为 false 的原因很简单,我们还是根据代码实现来说明:
@Override
public boolean equals(Object o) {
return (o
instanceof Long) && (((Long) o).value == value);
}
Integer num1 =
100;
Ingeger num2 =
200;
Long num3 =
300l;
System.out.println(num3 == (num1 + num2));
//true
int num1 =
100;
int num2 =
200;
long mum3 =
300;
System.out.println(num3 == (num1 + num2));
//true
==
运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。
Integer integer100=
null;
int int100=integer100;
总结
原文链接:https://www.cnblogs.com/wang-yaz/p/8516151.html
Java后端交流群已成立
公众号运营至今,离不开小伙伴们的支持。为了给小伙伴们提供一个互相交流的平台,特地开通了官方交流群。扫描下方二维码备注 进群 或者关注公众号 Java后端 后获取进群通道。
推荐阅读
1. MyBatis-Plus常用 API 全套教程
2. 如何用手机抓包?
3. 牛逼!Docker从入门到上瘾
4. 连夜撸了一个简易聊天室
5. 推荐一款 Java 对象映射神器
本文分享自微信公众号 - Java后端(web_resource)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
相关文章
暂无评论...