1、ToStringBuilder、HashCodeBuilder、EqualsBuilder、ToStringStyle、ReflectionToStringBuilder、CompareToBuilder等这些类在系统中通常打印日志。 因为使用的是所有实体的toString (方法很简单)。 (因为每个)都更新String对象,所以较小的系统内存会占用大量内存。)有很多前提系统实体。)。 使用ToStringBuilder可以避免内存突发的问题。 二、样例学习1、ToStringBuilder的append方法ToStringBuilder类主要用于类的格式输出。 ToStringBuilder的append方法可以将基本类型、数组和对象添加到类中。 只有添加的方法在toString中输出。 例如:
class tax return { privatestring SSN; 隐私在年; 私有字符串最后名称; 私有二进制表信息; //get/set方法是公共tax return (}公共tax return (stringp SSN,int pYear,String pLastName,BigDecimal pTaxableIncome ) ) setlastname(plastname; settaxableincome (ptaxableincome; } public String toString () returnnewtostringbuilder(this ).append )、ssn ).append )、year )、year ).append } publl } publicbooleanequals (对象对象) { boolean equals=false; if(pObjectinstanceoftaxreturn ) tax return bean=(tax return ) pobject; equals=(newequalsbuilder (.append ) SSN,bean.ssn ).append (year,bean.year ) ).isEquals ); }返回查询; }公共int compare to (object pobject ) returncomparetobuilder.reflection compare (this,pobject ); }公共类主类{ publicstaticvoidmain (string [ ] pargs ) throwsexception ) taxreturnreturn1=newtaxreturn () 012 tatax tax return return3=new tax return (' 012-68-3242 ',1999,' O'Brien ',newbigdecimal ) ) 53222.00; system.out.println (to stringbuilder : ) return1.tostring ); }运行结果为to stringbuilder 3360 tax return @ 1503 a3 [ SSN=012-68-3242,year=1998,lastName=O'Brien] 2,to stringbuilill 我的类two=new my class (' Becker ',35 ); 我的类别three=new my class (Agassi ),33 );
System.out.println("One>>>" + one); System.out.println("Two>>>" + two); System.out.println("Three>>>" + three); System.out.println("one equals two? " + one.equals(two)); System.out.println("one equals three? " + one.equals(three)); System.out.println("One HashCode>>> " + one.hashCode()); System.out.println("Two HashCode>>> " + two.hashCode()); System.out.println("Three HashCode>>> " + three.hashCode()); }} class MyClass { private String name = null; private int age = 0; public MyClass(String name, int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); } public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); } public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); }} 运行结果如下: One>>>MyClass@743399[ name=Becker age=35 ] Two>>>MyClass@1d8957f[ name=Becker age=35 ] Three>>>MyClass@3ee284[ name=Agassi age=33 ] one equals two? true one equals three? false One HashCode>>> 462213092 Two HashCode>>> 462213092 Three HashCode>>> -530629296 ToStringStyle参数说明: 1. DEFAULT_STYLE com.entity.Person@182f0db[name=John Doe,age=33,smoker=false] 2. MULTI_LINE_STYLE com.entity.Person@182f0db[ name=John Doe age=33 smoker=false ] 3. NO_FIELD_NAMES_STYLE com.entity.Person@182f0db[John Doe,33,false] 4. SHORT_PREFIX_STYLE (即截去了包名) Person[name=John Doe,age=33,smoker=false] 5. SIMPLE_STYLE John Doe,33,false ############################################### 附加: 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数。你可知道,有很多现成的工具类可用,并且代码质量都很不错,不用你写,不用你调试,只要你发现。 在 Apache Jakarta Common 中, Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的,几乎你所知道的名气比较大的软件里面都有用到它,包括 Tomcat, Weblogic, Websphere, Eclipse 等等。我们就从这个包开始介绍整个 common 项目。 Lang 中工具类比较多,这里介绍几个主要的: ClassUtils: getShortClassName,这个函数应该在 java.lang.Class 类中有的,我看到很多人自己写这个函数。getAllInterfaces,convertClassNamesToClasses,isAssignable,primitivesToWrappers,isInnerClass。 NumberUtils: 关于数字以及数字和字符串转换的类 stringToInt,toDouble,createNumber,isAllZeros, int compare(float lhs, float rhs), isNumber(String str),double min(double[] array)。 RandomUtils: 用于产生随机数的。 DateFormatUtils: 日期时间格式转换,以及本地时间和 UTC 时间转换。 DateUtils: 日期工具类。isSameDay,truncate,round,modify。 基于反射机制的几个类: CompareToBuilder: 比较,用在算法、排序、比较的地方。reflectionCompare,append。 EqualsBuilder: 通过反射机制比较。reflectionEquals 很多项目中用到。 HashCodeBuilder: 可以通过反射生成 hash code,很多算法的地方涉及到 hash code,但是并不是每个人都知道一种 hash code 的生成方法。 ToStringBuilder: hldbbt需要重载 toString 函数而不想写代码把当前类的所有成员信息列出来,可以用这个函数。 其它的几个类我用得比较少: SerializationUtils Java中得序列化比较奥妙,容易出错啊。 SystemUtils 可以读取一些关于 jdk 信息,操作系统信息的工具类。