Sti*_*ing 12 java unboxing equality
我知道这是一个非常基本的问题,但我想明确这个概念.我想知道==运算符在原始类型和对象类型的情况下如何工作.例如
Integer a = 1;
int b = 1;
System.out.println(a == b)
Run Code Online (Sandbox Code Playgroud)
如何a与之比较b,而a包含包含值1的对象的引用.有人可以向我清楚它是如何在内部工作的吗?
akh*_*ess 16
通常,Java中的相等运算符执行所谓的浅比较.换句话说,它比较变量包含的值.现在,原始数据类型的变量包含值本身,而引用类型包含对存储实际内容的堆区域的引用.这意味着,在您的代码段int b将持有价值1和Integer a将举行堆上的实际Integer对象的内存地址.
现在,在您提供的特定示例中,有一个特征.Integer类是一个包装原始整数类型的特殊包装类.编译器可以自动在这些包装器对象和原始类型(称为装箱和拆箱)之间进行转换.
让我们一步一步地告诉您代码清楚.
Integer a = 1;
Run Code Online (Sandbox Code Playgroud)
编译器实际上替换了以下代码:
Integer a = Integer.valueOf(1);
Run Code Online (Sandbox Code Playgroud)
static方法valueOf返回一个包装器对象实例,该实例包装提供的原始值.当编译器从基本类型构造包装类时,此过程称为装箱.
当使用这样的包装器对象时,使用相等运算符将其与原始变量进行比较
a == b
Run Code Online (Sandbox Code Playgroud)
编译器实际上将其更改为以下内容:
a.intValue() == b;
Run Code Online (Sandbox Code Playgroud)
其中intValue返回包装器对象包装的原始值(称为拆箱),即它将原始值解包并使表达式等效于比较两个基元.这就是等于运算符然后返回的原因true
| 归档时间: |
|
| 查看次数: |
14791 次 |
| 最近记录: |