「java打印对象hash」java打印对象的属性

博主:adminadmin 2022-11-29 04:28:09 64

今天给各位分享java打印对象hash的知识,其中也会对java打印对象的属性进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中为什么有的直接打印对象输出的是哈希值,打印date对象输出的是时间

java.util.Date 这个类自己重写了toString方法

直接打印对象的时候是调用父类也就是Object的toStirng方法

public String toString() {

// "EEE MMM dd HH:mm:ss zzz yyyy";

BaseCalendar.Date date = normalize();

StringBuilder sb = new StringBuilder(28);

int index = date.getDayOfWeek();

if (index == gcal.SUNDAY) {

index = 8;

}

convertToAbbr(sb, wtb[index]).append(' '); // EEE

convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM

CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd

CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH

CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm

CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss

TimeZone zi = date.getZone();

if (zi != null) {

sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz

} else {

sb.append("GMT");

}

sb.append(' ').append(date.getYear()); // yyyy

return sb.toString();

}

java之地址值和hash值的关系

首先先说hash值,hash值是通过hashCode()Object有这个方法(个别重写的先不谈如String),你可以去看Object中的hashCode()方法;这个方法上面有(@.....说明英语不好 反正就是表示非显示不给看的)(被native修饰过的说明不是用本语言写的就是不是java来实现的),总的来说这个方法就是通过hash算法来的(后面一个数永远等于前面两个数之和),这个就是哈希值;而电脑是怎么算的呢?每一个东西都有一个ASCII码比如a是97....然后现在都是通过斐波那契算法来算的(想了解的自己去百度),应该明白哈希值了吧。

然后说说地址值吧,每一个东西都会被电脑放在硬盘内存里面,然后电脑通过hash算法得到hash值,最后你的地址值就hash值的十六进制,所以那些地址值有小写字母什么的。

所以你有时候重写hashCode方法注意返回值是int类型但是不是十进制哦!不然会出现erro异常的。所以一般重写hashCode都是直接返回1即不会输入特别复杂的数组,不然你还要转十六进制;还帮你扩展扩展,equals除了String重写了不同以外,都是继承了Object类的equlas方法;注意equals比较的也是是否是同一个对象和"=="一样的一个比较基本数据类型一个比较引用类型的。但是我们只能重写“equals”,基本数据类型系统自带不给你显示的所以我也看不到,其实equals不重写的话比较的就是地址码,就是hashCode方法得来的。集合hashSet有时候不能满足我们加入的条件需要我们自己重写equlas和hashCode方法了,前面也说了 其实可以只重写hashCode方法就可以了,那为什么都要一起写呢,因为你不觉得十六进制的转换很麻烦吗?为了效率基本上都是直接return1;你的条件都是写在equals里面。

你可以去试试重写hashCode方法,在打印这个类对象,显示的就是包名加地址码了,不要超过十六这个数字会抛erro异常的。

Java 在什么情况下要重写toString

两个都重写toString了吧。你查查JDK的API就知道了。

首先说一下,什么情况下要重写toString,object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。所以当你要想按照你想要的格式去字符串一些对象的时候,就需要重写toString了。比如一个Student对象,直接toString肯定是一个hash码。然而你想得到的比如是:name:***,age:***。这时就重写toString就是在toString里写:System.out.println(“name:”+student.getName);

System.out.println(“age:”+student.getAge)。

这样再toString就直接反回你想要的格式。

通过查api我们就可以知道HashSet的toString是把s的值格式化成[*, * ,*],就是给s的加个中括号,而且用逗号分开。

而HashMap的toString是把m的值格式化成{key1=value1,key2=value2,key3=value3}

所以你打印出来的是那样的格式,这就是重写toString的作用,具体请看api吧。

希望你能理解。谢谢,有不懂的再问。

关于java的哈希值

每个对象都有自己的哈希值,但并不是每次创建对象的时候都要判断有没有相同的对象,如果需要在程序运行中只有一个对象,那么我们一般会使用单例模式类避免重复创建对象,每个对象都有一个hashCode()方法,比如integer a = 10;那么a.hashCode();就是a对象的哈希值,能够使用打印语句输出。

关于java打印对象hash和java打印对象的属性的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。