string-关于Java中 源代码 String 类中的 equals

问题描述

关于Java中 源代码 String 类中的 equals
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String) anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                        return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

第二行的 this指的是什么?

这还有一个扩展的程序

public class EqualsTest
{
public static void main(String[] args)
{
Student s1 = new Student("zhangsan");
Student s2 = new Student("zhangsan");

    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
}

}

class Student
{
String name;

public Student(String name)
{
    this.name = name;
}

public boolean equals(Object anObject)
{
    if(this == anObject)
    {
        return true;
    }

    if(anObject instanceof Student)
    {
        Student student = (Student)anObject;

        if(student.name.equals(this.name))
        {
            return true;
        }
    }

    return false;
}

}

这个程序中student.name 指的是s1还是s2

new对象的时候不是new 了两个对象吗

解决方案

package com.answer;

public class Student {
public static void main(String[] args) {
Student s1 = new Student("zhangsan");
Student s2 = new Student("zhangsan");
System.out.println(s1 == s2); // == 比较的是内存结果

  System.out.println("调用equal方法前");
  System.out.println(s1.equals(s2));   // 根据重写的equal方法进行判断
  System.out.println("调用equal方法后");
  System.out.println(s1);
  System.out.println(s2);    // 观察输出 内存地址不同

}
String name;
public Student(String name)
{
this.name = name;
}

public boolean equals(Object anObject)
{
System.out.println("调用equal方法");
// this 在这里是s1 与 s2 内存地址不同 不成立
if(this == anObject)
{
return true;
}
// s2是Student类的对象 if条件成立
if(anObject instanceof Student)
{
// 类型转换
Student student = (Student)anObject;

      // 都等于zhangsan 返回true
      if(student.name.equals(this.name))
      {
          return true;
      }
  }

  return false;

}
}

运行结果:

解决方案二:

1、this指当前字符串,比如"a".equals("b"),this指"a"
2、student.name指s2,Student student = (Student)anObject; 其中anObject是equals参数,你写的是s1.equals(s2)。所以是s2

解决方案三:

指的是当前类的类的对象

解决方案四:

显然是另一个对象的。s1调用equals,this才是s1

解决方案五:

一楼正解!this就是当前对象.

时间: 2024-10-04 12:58:21

string-关于Java中 源代码 String 类中的 equals的相关文章

java代码-java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的?

问题描述 java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的? class Demo03 { public static void main(String[] args) { A.show(); } } class A { //构造方法 A(){ System.out.println("构造方法执行"); System.out.println(b); System.out.println(c); } static A a=new A(); sta

成员变量-如何让JAVA不自动回收某个类中的变量?

问题描述 如何让JAVA不自动回收某个类中的变量? 我的一个web应用中 初始化的时候会给一个类中的静态成员变量赋值,然后隔一段时间会改变成员变量中的值,这样java会自动回收吗?如果长时间不改变成员变量的值会给我回收掉吗?如果回收的话有什么办法可以不让他回收? 解决方案 静态类本身不会回收,但是如果你的程序运行在容器中(比如web程序),而容器本身会回收,这种情况相当于关闭了你的程序.那么当然这些变量全部都没有了. 你有两个办法,一个是根据容器的约定,阻止它回收.比如说容器规定,10分钟没有用

java-Java中在同一个类中把一个方法中的数组元素传到另一个方法中,怎么传啊?麻烦大家说一下,谢谢了!

问题描述 Java中在同一个类中把一个方法中的数组元素传到另一个方法中,怎么传啊?麻烦大家说一下,谢谢了! Java中在同一个类中把一个方法中的数组元素传到另一个方法中,怎么传啊?麻烦大家说一下,谢谢了! 麻烦大家了 解决方案 直接作为参数传就是了 void f1() { int[] x = {1,2,3,4,5}; f2(x[1]); } void f2(int n) { } 解决方案二: Spring AOP代理机制以及方法调用在同一个类的另一个方法的问题 解决方案三: 可以使用全局变量的方

怎么在 python程序编辑中自动加载库中函数或类中的成员??

问题描述 怎么在 python程序编辑中自动加载库中函数或类中的成员?? 在使用import引用系统模块时 如import(sys)中的函数 如:print(sys.path) 调用path函数 在写程序时想写sys . 后自动出现sys中所有的 成员 就像C#或java 中编辑代码一样 我用的是editPlus 编辑器 是不是要安装插件之类的 解决方案 不如直接用python tools for visual studio 解决方案二: 可以试试pycharm编辑器.功能比较强大,目前最好的编

在MFC单文档程序中,如何在子对话框类中访问视类中的一个变量?

问题描述 在MFC单文档程序中,如何在子对话框类中访问视类中的一个变量? 如题,小弟最近遇到一个问题,新建一个单文档程序,并在其中引入对话框资源.我想在视类的OnDraw()函数中通过响应视类的一个变量的变化来改变视类窗口中图形的状态,而该视类变量的变化是由对话框中的一个控件控制的,这个控件是由旋钮控件和编辑控件捆绑而成的.在网上看了一些资料,试了其中的一些方法,都没能成功.论坛中高手众多,想请热心的高手们给个解决方法,在此先谢过了!能给个相似的例子的更好! 解决方案 要么你把那个变量定义成静态

c++-C++中 不能在类中访问this的地址

问题描述 C++中 不能在类中访问this的地址 如class a{ public: void show(){ cout<<&this; }}如果this是一个指针,为什么不能访问它的地址? 解决方案 首先要搞清楚this指针是存放在哪的?编译器在生成程序时加入了获取对象首地址的相关代码,并把获取的首地址存放在了寄存器ECX中(VC++编译器是放在ECX中,其它编译器有可能不同),也就是成员函数的其它参数正常都是存放在栈中,而this指针参数则是存放在寄存器中.寄存器不能像被外设寄存器

设置背景颜色-MFC中在View类中改变ClientDC的背景颜色

问题描述 MFC中在View类中改变ClientDC的背景颜色 我在MFC中建立了一个工程,用来在CView类中通过ClientDC来进行画图操作,现在想将ClientDC的默认背景颜色从白色改成黑色或者其他的颜色,求各位C大神指点,谢啦! PS:我试过在PreCreateWindow()和OnEraseBkgnd()函数中进行设置,但是没有成功,代码如下,请各位大神改正. BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs) { cs.lpszCl

在C++中 怎么在派生类中使用基类中的成员变量 例如如下代码 怎样才能使其跑起来

问题描述 在C++中 怎么在派生类中使用基类中的成员变量 例如如下代码 怎样才能使其跑起来 #include using namespace std; class love{ public: char you() { int i=87, j=74 ,k=89; char a=char(i),b=char(j),c=char(k); return 0; } }; class Me:private love{ public: Me():l(a),u(b),n(c){} char const l,u,

Android中,BaseAdapter类中怎么获取屏幕宽度?

问题描述 Android中,BaseAdapter类中怎么获取屏幕宽度? 本人小白,自定义了个MyAdapter继承BaseAdapter,现在想在MyAdapter中获取屏幕宽度,但是该类不是Activity也不是service,WindowManeger获取不到.getSystemService(Context.WINDOW_SERVICE),Resources的getResources();也没有. 解决方案 如果 控件宽度是适应屏幕的话 getView(int position View