`
talentluke
  • 浏览: 604516 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Integer疑难

 
阅读更多
Java代码  收藏代码
  1. public   static   void  main(String[] args) {  
  2.       
  3.         Integer a=200 ;  
  4.         Integer b=200 ;  
  5.         int  c= 200 ;  
  6.         System.out.println("a==c  " +(a==c));  
  7.         System.out.println("b==c  " +(b==c));  
  8.         System.out.println("a==b  " +(a==b));  
  9. }  


请问LZ,对于这段代码的运行结果是:
Java代码  收藏代码
  1. a==c   true   
  2. b==c  true   
  3. a==b  false   


既然a和b都是通过Integer新建的对象,而c是在栈中的常量,为什么a、b会和c的地址相等,而a和b的地址又不相等呢?




我绝对大家要学会看.class文件

Integer a=200;
int c=200;
System.out.println("a==c");

被编译器这样编译:

Integer a=Integer.valueOf(200); 这个时候引用a存储的是堆栈中Integer对象的地址 (注意a是对象引用)
int c=200; 编译器把常量200写进常量池,然后栈中的变量c里面存放的就是这个值200 (注意c是变量名)
int temp=a.intValue();  大家可以去看看intValue()的源代码,实际上编译器并没有temp这样的变量,而直接把intValue()的返回结构压入操作数栈。我这些写实为了大家明白过程(不存在temp的).

System.out.println(temp==c);

大致的过程就是这样
总结一下:
(1) 当把一个整形常量或变量直接赋值给Integer引用时,比如 Integer a=200, 或 int b=200; Integer a=b;
    这是编译器会调用Integer.valueOf()方法来自动打包int基本类型。
(2) 当比较一个Integer对象和一个int基本类型变量的时候,编译器会调用Integer对象.intValue()将Integer对象自动拆包,然后比较两个整形变量。

注意编译器给我们做了很多工作,大家不要忘记了他的辛苦。要把它的汗水记得明明白白它的心!!

分享到:
评论

相关推荐

    Visual Basic编程疑难问题解

    ### Visual Basic编程疑难问题解析 #### 一、VB中如何使用C++类? 在Visual Basic (简称VB)中使用C++类通常是通过编译C++类为动态链接库(DLL)来实现的。这种方式不仅能够使得VB应用充分利用C++的强大功能,同时...

    Java编程10个疑难问题

    从给定的文件信息中,我们可以总结出两个关键的Java编程疑难问题,这些问题涉及了Java中的随机数生成和哈希代码实现,对于深入理解Java语言特性和编程实践具有重要意义。 ### 1. 随机数生成的问题 #### 问题描述:...

    Java 疑难杂症_笔记.pdf

    ### Java 疑难杂症知识点详解 #### Jdk、Jre、Jvm区别 - **Jdk (Java Development Kit)**:Java开发工具包,包含了编译、运行Java程序所需的各种工具,例如`javac`(Java编译器)、`java`(Java解释器)以及其他...

    ----AS3学习笔记

    NT.htm"可能包含了社区论坛上关于AS3学习的经验分享、示例代码或疑难解答等内容,是深入学习AS3的好资源。对于初学者而言,理解AS3的基础语法、掌握Flex框架的使用,以及不断实践和探索社区资源,是提升AS3和Flex...

    java 方法的流程控制与异常处理

    - **实现思路**:使用`Integer.toBinaryString()`和`Integer.toHexString()`方法进行转换。 - **代码示例**: ```java import java.util.Scanner; public class NumberConversion { public static void main...

    ASp教程第一章-基础操作

    VBScript支持的基本数据类型有String(字符串)、Integer(整数)、Double(双精度浮点数)、Boolean(布尔值)、Date(日期/时间)和Object(对象)等。 4. **响应对象Response**:Response对象是ASP中的重要对象...

    erro-solucao-produto-e-divisao:JAVASCRIPT ES6 + MATCH()+ NUMBER()+ BIGINT()+ MAX_SAFE_INTEGER + TYPEOF

    已发布的练习参考了BOOTCAMP的培训-NodeJS开发人员-JavaScript疑难解答( ) 挑战说明: 您有义务测试计算器,以便它们仅执行乘法和除法运算。 此外,在每个操作中要输入的术语(显示屏上显示的数字将被相除或相乘...

    java解惑很全的题目

    【Java解惑很全的题目】是一份专为Java学习者设计的疑难解答文档,它包含了一系列关于Java编程语言的问题和谜题,旨在帮助读者深入理解Java的核心概念、语法特性和编程技巧。以下是对其中部分题目及其涉及知识点的...

    VB编程指南VB编程指南

    VB编程指南.chm文件可能包含了VB编程的所有关键知识点,从基础语法到高级特性的详细讲解,包括实例代码和可能的疑难解答。通过深入学习这个指南,开发者可以全面掌握VB编程,从而创建出功能丰富的桌面应用程序。

    [应用开发及迁移][客户端编程接口]ODBC指南.pdf

    #### 七、疑难解答 - **连接失败**: 检查连接字符串是否正确,数据库服务是否正在运行。 - **性能问题**: 考虑优化查询语句或增加索引。 - **数据类型不匹配**: 确保应用程序中使用的数据类型与数据库表中的数据...

    VB6语言手册(中文)

    5. **基本数据类型**:包括Integer、Long、Single、Double、String等,以及自定义的数据类型。 6. **控制结构**:VB6支持条件语句(If...Then...Else)、循环语句(For...Next、Do...Loop)以及选择结构(Select ...

    VB入门教程详细教程~

    数据类型疑难解答 * 已声明的元素 * 委托 * 早期绑定和后期绑定 * 错误类型 * 事件 * 接口 * 演练:创建和实现接口 运算符和表达式 * 过程 * 语句 * 字符串 * 变量 * XML * COM 互操作 * COM 互操作介绍 * 如何:...

    Visual Basic 6.0中文版语言参考手册

    1. **基本语法与数据类型**:VB6支持多种数据类型,如Integer、Double、String、Boolean等。理解这些数据类型的特性和用法是编写有效代码的基础。此外,还包括变量声明、常量定义以及运算符的使用。 2. **控制结构*...

    VB技巧问答10000例

    《VB技巧问答10000例》是一部深入探讨Visual Basic(VB)编程技术的宝典,涵盖了VB编程中的各种技巧、疑难问题及其解决方案。这本书旨在帮助VB开发者提高编程效率,解决实际开发过程中遇到的问题,提升编程技能。...

    VBA EXCEL教程

    **6.7 疑难解答** - **常见问题**: 解决控件使用中遇到的各种问题。 #### 七、理解变量和变量的作用 **7.1 代码存在的位置:模块** - **模块**: 包含VBA代码的容器,用于组织和管理代码。 **7.2 对模块的概览** -...

    Excel VBA 详解

    - **数值型**: `Integer`(整型)、`Long`(长整型)、`Single`(单精度浮点型)、`Double`(双精度浮点型)。 - **文本型**: `String`。 - **布尔型**: `Boolean`。 - **日期时间型**: `Date`。 - **特殊类型**: `...

Global site tag (gtag.js) - Google Analytics