栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

object类的方法、断点调试

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

object类的方法、断点调试

object类的方法、断点调试

(韩顺平Java321p)

在Java中每个类都直接或者间接继承Object类

== 与 equals的对比 ==是一个比较运算符
  • 既可以判断基本类型,又可以判断引用类型
  • 如果判断基本类型,判断的是值是否相等
  • 如果怕判断引用类型,判断的是地址是否相等

这次彻底搞懂Java中equals和==的区别 - 知乎 (zhihu.com)

equals方法

是Object类中的方法,只能判断引用类型(Java中所有的类都有equals方法)

默认(Object)判断的是地址是否相等(就是判断两个对象是不是同一个对象),子类(Integer,String)中往往重写该方法,用于判断内容是否相等

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;
     }
实例
public class equalsText {
    public static void main(String[] args) {
        person person1 = new person1("0.0",18);
        person person2 = new person1("0.0",18);
        System.out.println(person1.equals(person2));
    }

}
class person{
    private String name;
    private int age;

    public person1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }  

    public boolean equals(Object ob){
        //如果是同一个对象,返回true
        if(this ==  ob){
            return true;
        }
        if (ob instanceof person){//向下转型
            person p1 = (person) ob;
            return this.name.equals(p1.name) && this.age == p1.age;
        }
        return false;
    }
}

hashCode方法
  • 提高具有哈希结构的容器的效率
  • 两个对象引用,如果指向的是同一个对象,则哈希值肯定是一样的
  • 两个对象引用,如果指向的是不同对象,则哈希值肯定是不一样的
  • 哈希值主要根据内部地址转换成一个整数来实现的,不能把哈希值等价于地址
toString方法

在没有重写tostring的前提下,每次执行System.out.println() 这个方法默认就会调用一个继承自Object 类型对象的toString 方法

重写toString()方法的意义所在
  • 默认返回:全类名(包名+类名) + @ + 哈希值的十六进制
  • 子类往往重写toString方法,用于打印对象属性或拼接对象属性(快捷 alt + ins --> toString)
  • 当直接输出一个对象时,toString方法会被默认的调用
a a1 = new a();
    System.out.println(aa1);//等价a.toString();

class a{
}
public String toString() {  //源码   object类中的toString()方法
    //getClass().getName()+"@"+Integer.toHexString(hashCode())将对象的hashCode值转为十六进制字符串
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
finalize方法

当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法

  • 当对象被收回时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作
  • 什么时候被回收:当某个对象没有任何引用时,JVM就认为这个对象是一个垃圾对象,就回使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用finalize方法
  • 垃圾回收机制的调用,由系统来决定(自带GC算法),也可以通过System.gc() 主动调用垃圾回收机制

断点调试 (debug)!

是指程序的某一行设置一个断点,调试时,程序运行到这一行就会停止,然后可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码即显示错误,并停下,进行分析从而找到这个Bug

断点调试也能帮助我们查看Java底层源代码的执行过程

断点调试过程中,是运行状态,是以对象的运行类型来执行的

断点可以在debug过程中,动态的下断点

快捷

F7:跳入方法内

F8 : 逐行执行代码

F9 :resume,执行到下一个断点

shift + F8 :跳出方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878418.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号