阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 837|回复: 0

[转帖] 在Java中实现对象比较的几个相关概念

[复制链接]
  • TA的每日心情
    郁闷
    2012-3-7 10:18
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2012-1-4 12:04:33 | 显示全部楼层 |阅读模式
    一、跟对象比拟的几个相关的概念   为了愈加审核的了解对象比拟的含义以及多个比拟方法之间的差异,笔者以为读者首先需求了解几个相关的概念,或许说几对关系。  一是类与对象的关系。类是具体的抽象,而对象是类的具体实现。这能够听起来还是有点模糊。做一个形象的比喻,类就似乎是用来制作塑料盒子的模具,只需将PVC料注入到这个模具中就可以消费对应形状的盒子。而对象就似乎是消费出来的盒子。虽然模具同一个,但是消费出来的盒子彼此之间依然是不同的。一方面后天分就是不同的。因为根据相对论可以阐明世界上没有两个相同的东西。其次后天分的影响,也会导致其不同。如消费出来后,在两个盒子上辨别贴上不同的条码,他们两个就代表不同的盒子了。了解这个类与对象之间的关系,对于了解对象之间进行比拟,会有很大的协助。  二是需求晓得类与对象在内存中的实践存储情况。当顺序员定义一个类时(不含有静态成员或许变量),一般不会在内存中给其分配一个存储结构。而只要定义对象时,才会在内存中分配存储结构。当利用同一个类定义不同的对象时,系统会在内存中为不同的对象创立不同的存储结构。也就是说,会对应不同的内存地址。虽然同一个类中定义出来的对象,其内容能够相同(成员变量、成员方法等等都相同),但是其内存中的地址依然是不同的。  三是需求注意对象的复制成绩。假如要创立几个内容相同的对象,即复制相同内容的对象,如今次要有两种方法。一是通过成员变量赋值来完成。如在根据同一个类创立对象时,辨别给与他们相同的初始化值。那么这两个对象的内容就是相同的。二是通过地址赋值来完成。即将第一个对象在内存中的地址赋值给第二个对象。此时两个对象名字虽然不同,但是他们却指向内存中的同一块区域。此时就似乎一个人有两个名字,其实是同一个人。所以这两个对象内容也就相同了。  二、利用==运算符与equals方法来比拟对象  在Java言语中,次要可以利用==运算符(两个等号)和equal函数来对对象进行比拟。不过这两个符号其实现的机制不同。或许说,对于异样的两个对象,假如利用他们来进行比拟的话,往往会有不同的结果。如String是Java自定义的对象,其次要用来存储字符串数据。如今笔者利用如下语句定义了三个String对象。 Stringstr1=newString(“welcome”);//创立一个对象,给利用单词welcome初始化   Stringstr2=newString(“welcome”);//创立一个对象,给利用单词welcome初始化   Stringstr3=str1;//创立一个对象,并利用对象str1的地址赋值  以上三个对象,显而易见,其内容都是相同的。但是利用这个两种方式来对他们进行比拟的时候,往往会有不同的结果。如利用==(两个等号)比拟符号来进行比拟,str1==str2,最后返回的结构是false,也就是他们是不相同的对象。可是假如比拟str1==str3对象,则最后返回的结果却是true。但是利用equal函数来比拟,则返回的结果是相同的。为什么对象的内容相同,它们返回的结果却是不同的呢?   要回答这个成绩,就需求大家先回顾一下笔者上面谈到的几对关系。首先,对象str1与对象str2的关系,就似乎是同一个模具出来的两个盒子,他们从外观看起来虽然相同,但是通过缩小镜或许其他精细仪器依然可以看到,两个盒子是不同的东西。这两个对象虽然内容相同,康纽莱液体钙但是其在内存中分配的地址不同。也就是说,是同一个模具出来的外观看起来相同的不同的盒子。而对象str1与对象str3就似乎是一个人有两个名字。虽然名字不同,但是实践上是同一个人。这次要是因为他们的身份证号码相同。其实这个身份证号码就似乎是内存中发配的地址,而对象名字就好象是人的名字。一个人可以有好几个名字(一个对象有好几个名字),但是其身份证号码只要一个(内存分配地址只要一个)。在上面的语句中,通过str3=str1,其实现的功能,并不是将对象str1的值赋值给对象str3。而是将对象str1在内存中的地址赋值给了对象str1(就似乎是将一个人的身份证号码复制给了另外一个人)。所以从本质上说,str3并不是一个新树立的对象。因为系统并没有在内存中为其分配一个新的存储区域(即并没有发明一个新的人),而只是似乎给对象另外取了一个别名。


    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表