当前位置:  技术问答>java相关

疑惑??????

    来源: 互联网  发布时间:2015-04-24

    本文导语:  public class NumberTest{   public static void main(String[] args) {     Integer n1 = new Integer(1);     Integer n2 = new Integer(1); System.out.println(n1 == n2);     System.out.println(n1 != n2);   } }  上述程序的输出结果是 false true ...

public class NumberTest{
  public static void main(String[] args) {
    Integer n1 = new Integer(1);
    Integer n2 = new Integer(1);
System.out.println(n1 == n2);
    System.out.println(n1 != n2);
  }


上述程序的输出结果是
false
true

public class NumberTest{
  public static void main(String[] args) {
    int n1 = 1;
    int n2 = 1;
    System.out.println(n1 == n2);
    System.out.println(n1 != n2);
  }


上述程序的输出结果是
true
fasle

为什末两次的输出结果不一样呢?


|
第一个程序中n1和n2只是句柄,不是具体的对象。尽管对象的内容相同,句柄却是不同的,而==和!=比较的正好就是对象句柄。所以输出结果实际上先是false,再是true

第二个程序中,n1、n2不是句柄,它们是自动变量。用句柄指向的对象被置于内存堆中,自动变量置于堆栈中,能够更高效地存取。这些自动变量的类型我们通常形象的称为“主类型”。

|
对Integer n1 = new Integer(1),n1是一个对象的实例。
而int n1 = 1则是定义了一个整数。
现在明白为什么不一样了吧。

|
因为一个是Integer,==比较的是两个对象的是否相等,不是它的内容而是是否指向同一个对象

|
Integer是个对象,==两端的对象比较表示比较两个对象的地址
那么两个对象地址当然不会相等
int用==比较就是比较值

|
public class NumberTest{
  public static void main(String[] args) {
    Integer n1 = new Integer(1);
    Integer n2 = new Integer(1);
System.out.println(n1.equals(n2));
    System.out.println(!(n1.equals(n2)));
  }



    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 第一次遇到这个“简单”的继承问题,疑惑疑惑疑惑啊
  • 我的关于BS结构的疑惑
  • ps命令状态码疑惑
  • 关于学linux的一点疑惑
  • epoll多路复用模型的疑惑,请高手解答
  • ***对一个中断机制的疑惑***
  • 操作系统对于"堆"内存的管理,一个疑惑
  • 关于classpath的疑惑
  • 关于CheckboxGroup的疑惑
  • 使用"<jsp:forward...>"的疑惑
  • 关于import的疑惑
  • 一个关于linux源代码的疑惑
  • 请问应用服务器本身也是采用多层结构吗?疑惑中。
  • 菜鸟的疑惑!
  • 问一个很k的问题,请大虾解疑惑!on Line!!!
  • 初学者的疑惑:怎么才可以显示中文
  • 疑惑
  • signal的疑惑
  • 疑惑,怎么没人研究webmin 呢
  • 初学socket的疑惑


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3