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

一个非常基础的问题

    来源: 互联网  发布时间:2015-11-14

    本文导语:  1.public class Test extends Object {    public static void main(String [] args) {  Test t2=new Test();  Test t1=new Test(); }   System.out.println(t1.equals(t2)); } 2.Test t2=new Test();  Test t1=new Test(); 改为:  Integer t1=new Integer(100);  Intege...

1.public class Test extends Object
{
   public static void main(String [] args)
{
 Test t2=new Test();
 Test t1=new Test();
}
  System.out.println(t1.equals(t2));
}

2.Test t2=new Test();
 Test t1=new Test();
改为:
 Integer t1=new Integer(100);
 Integer t2=new Integer(100);
3.class Value{int i;}
  上面的 Test t2=new Test();
        Test t1=new Test();
改为:Value t1=new Value();
     Value t2=new Value();
     t1.i=t2.i=100;
1.为false 2为true 3。为false为什么?



|
equals()是Object的方法,可以理解为"相等"。显然两个object相等并不意味着相同;但是需要注意的是,也并不意味着他们对应内存区域的所有字节都相等,比如(但不限于这个原因)他们内部可能还有自己的引用。所以,两个对象是否相等,只有这个对象自己才知道如何判断,java并不知道。所以就需要该类自己提供一个equals方法
注意equals的参数是Object因此有可能传入的对象与你的类不同,因此在重载equals()方法是要检查类型,并作动态的“下溯造型”
如果你比较自己定义的类型,在比较之前一定要重载equals()方法,否则你用equals比较就会是==的效果


|
因为默认的equals是调用Object的equals方法而该方法是比较两个对象的内存地址是否相同,也就是是否是一个对象,所以1 3 为false
而2是因为对于Interger类型默认是比较数值是否相同,也就是在Integer中,重载了equals方法

|
这个问题有点伤脑筋,我也想知道,那位高手来解释一下啊!!!

|
总结如下:

在JAVA中,作为参数传递如果是基本类型,则是值传递;
如果是复合数据类型(即对象或数组),则是引用,传递句柄;传递后两个引用都应用同一个对象,这时候如果只是将其中一个引用指向另一个对象,则
对另一个引用不产生影响;而如果对其中一个引用做改变,则
两个引用都将改变
在下边的例子中正是将引用指向了另一个对象(NULL),所以
另一个引用不受影响,所以最后的输出结果是a a

总结:一般情况下,参数类型为符合数据类型(如数组或类对象)时,自动采用引用的形式,
      即传递给方法的是数据在内存中的地址。这时,如果在方法中不去修改形式参数所引用的
      句柄,且该对象所属的类定义了设置或修改数据成员的方法,就可以通过对象去调用方法
      修改数据成员来达到修改对象的目的,当然,如果该对象所属的类没有定义设置或修改数据成员的方法,
      就不能通过引用 改变对象的状态,比如String 类对象

问题的提出:
public class test {
String s = "a";
private void change (test ss) {
ss = null;
}
public static void main(String args[]) {
test t = new test();
System.out.println(t.s);
t.change(t);
System.out.println(t.s);
}
}
输出结果是什么?为什么?
答案:a a

|
Integer类跟String类都没有定义修改数据成员的方法,
所以比较时相当于是否equals

|
因为Integer重载了equals()方法

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












  • 相关文章推荐
  • Python异常处理基础知识
  • 强烈反对分成基础版、jsp等分法。
  • docker和VM虚拟机的区别以及如何用docker搭建基础设施
  • 业务基础软件平台 JXstar
  • HTML 基础知识教程及代码实例
  • 轻量的OA开发基础框架 OAer
  • Docker 基础用法和常用命令及选项介绍
  • 云服务软件基础平台 CloudStack
  • 请问大侠学java要有c语言基础吗?
  • 基础应用平台 JFaker
  • 手拉手业务基础平台
  • C实现的基础库 cfan
  • 健康信息基础平台 openMEDIS
  • 一道考验基础的JAVA语法题
  • Linux基础书籍推荐
  • 基础结构框架 Iframework
  • 请问,要有哪些java基础才能开始学习EJB???谢谢!!!(急!!!)
  • 学JAVA之前要不要先学一些基础的东西?
  • 《Linux那些事儿之我是USB》这本书怎么样。看这本书需要什么基础
  • 系统管理基础框架 Func
  • c#基础 filter 筛选器


  • 站内导航:


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

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

    浙ICP备11055608号-3