java 的哈希码以及Object.toString()简单理解

对哈希码和默认的toString()不了解,百度后总结如下:

一 哈希码

在Java中,哈希码代表了对象的一种特征,例如我们判断某两个字符串是否==,如果其哈希码相等,则这两个字符串是相等的。其次,哈希码是一种数据结构的算法。常见的哈希码的算法有:

1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。

2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。

3:Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。

二 Object对象默认的toString()

    假如.直接输出一个实例对象,出现一串字符串,代表什么?

    直接输出一个类的对象的时候,会调用这个类的toString()方法,这个方法有些类是覆盖了的,比如String,Integer。你自己写的类没有覆盖这个方法的话就是继承Object类的这个方法,Object中toString()方法的实输出格式是这样的getClass().getName() + "@" + Integer.toHexString(hashCode()) 后面跟的是这个类的哈希码,如果你希望这个类打印出来输出你希望的格式,你就要覆盖这个、toString方法。

以上部分内容摘自:https://zhidao.baidu.com/question/556180467.html         https://zhidao.baidu.com/question/179265608.html

测试:

package new_start1;
public class Test1 {
    class Person
    {
        public String name;
        public Person(String n)
        {
            this.name=n;
        }
        public Person(){}
    }
    public static void change(Person a)//改变对象a的name值
    {
        a.name="haha";
    }
    public static void main(String[] args) {    
        Test1 t=new Test1();
        Person p=t.new Person("zhangsan"); //实例一个对象p
        Person a=t.new Person();//又实例一个对象a
        System.out.println("未赋值前,两者的哈希码是不相同的:");
        System.out.println("a.hashCode="+a.hashCode()+"  "+"p.hashCode="+p.hashCode());
        System.out.println("a.toString()="+a.toString());
        System.out.println("p.toString()="+p.toString());
        /*
            未赋值前,两者的哈希码是不相同的:
            a.hashCode=366712642  p.hashCode=1829164700
            a.toString()=new_start1.Test1$Person@15db9742
            p.toString()=new_start1.Test1$Person@6d06d69c
         */
        a=p; 
        System.out.println("赋值后,两者的哈希码相同:");
        System.out.println("a.hashCode="+a.hashCode()+"  "+"p.hashCode="+p.hashCode());
        System.out.println("a.toString()="+a.toString());
        System.out.println("p.toString()="+p.toString());
        /*
             赋值后,两者的哈希码相同:
            a.hashCode=1829164700  p.hashCode=1829164700
            a.toString()=new_start1.Test1$Person@6d06d69c
            p.toString()=new_start1.Test1$Person@6d06d69c
         */
    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: object.tostring()方法是一个用于将对象转换为字符串的方法。它会返回一个表示该对象的字符串。在JavaScript中,所有的对象都继承了该方法,因此可以在任何对象上调用该方法。该方法通常用于调试和日志记录,以便查看对象的内容。 ### 回答2: object.toString()方法是Java中的一个方法,用于将对象转换为字符串的表示形式。这个方法是在所有的类中都有的,因为所有的类都直接或间接地继承自Object类。 toString()方法的默认实现是返回对象的类名和哈希的组合。但是,我们可以根据需要在具体的类中重写这个方法,以便返回我们期望的字符串表示。 重写toString()方法的目的是为了方便调试和日志记录。当我们使用System.out.println()打印一个对象时,其实就是调用了该对象的toString()方法。如果我们没有重写toString()方法,那么打印出来的就是它的默认表示形式,可能并不直观或有用。但是,如果我们重写了它,就可以根据需要自定义输出的格式,使得打印出来的信息更有意义。 自定义toString()方法的一个常见做法是返回对象的实例变量的值。通过这种方式,我们可以将对象的状态以字符串的形式展示出来,方便我们观察和调试。在重写toString()方法时,我们应该注意避免返回过多的信息,以免给调用者带来困扰或泄露敏感数据。 总之,object.toString()方法是一个在Java中常用的方法,用于将对象转换为字符串,便于调试和打印。我们可以根据需要在具体类中重写这个方法,以便得到更加有意义的字符串表示。 ### 回答3: object.toString()方法是Java中的一个方法,其作用是将一个对象转换成字符串表示。当我们使用System.out.println()或者直接将一个对象传入能够接受字符串的方法中时,会自动调用对象的toString()方法来获取其字符串表示。 在Java中,所有的类都继承自Object类,而Object类中的toString()方法默认返回一个对象的类名和哈希的字符串表示。例如,如果我们创建了一个类Student,并创建了一个Student对象stu,那么如果我们直接使用System.out.println(stu),就会自动调用stu的toString()方法,返回类似于"Student@123456"的字符串。 但是,很多时候,默认的toString()方法返回的字符串并不能满足我们的需求,因此我们可以在自定义的类中覆盖重写这个方法,来返回我们想要的字符串表示。例如,我们可以在Student类中重写toString()方法,返回包含学生姓名、年龄等信息的字符串,方便打印和调试。 总结来说,Object类中的toString()方法是将对象转换成字符串表示,方便打印和调试。默认情况下,返回类名和哈希的字符串表示,但我们可以在自定义类中覆盖重写这个方法,返回我们想要的字符串表示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值