「java打印对象hash」java打印对象的属性
今天给各位分享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打印对象的属性的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-29,除非注明,否则均为
原创文章,转载请注明出处。