java 中的clone 方法

尽量不要使用 clone 方法来克隆一个对象

拷贝

引用拷贝

创建一个指向对象的引用变量的拷贝。

public static void main(String[] args) {
        Stu stu = new Stu(22, "卢本伟");
        Stu stu1 = stu;
        System.out.println(stu);
        System.out.println(stu1);
    }

输出结果:

Stu{age=22, name='卢本伟'}
Stu{age=22, name='卢本伟'}

clone.png

在讨论深浅拷贝之前,我们先定义两个类

- 阅读剩余部分 -

equals() 和 hashCode() 区别

转载自:https://www.cnblogs.com/jesonjason/p/5492208.html

equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。

hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。

之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。

两个obj,如果equals()相等,hashCode()一定相等。

两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。

所以:在集合中,判断两个对象是否相等的规则是:

第一步,如果hashCode()相等,则查看第二步,否则不相等;

第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。

为什么选择hashcode方法?

以java.lang.Object来理解,JVM每new一个Object,它都会将这个Object丢到一个 Hash 哈希表中去,这样的话,下次做 Object 的比较或者取这个对象的时候,它会根据对象的 hashcode 再从 Hash 表中取这个对象。这样做的目的是提高取对象的效率。具体过程是这样:

- 阅读剩余部分 -

当使用 structs2.5 以上版本的时候,在使用 * 通配符进行匹配的时候,要加上 <allowed-methods> ,且必须放在 action 的最后,否则路由无法匹配上

<action name="book_*" class="cn.edu.xaut.action.BookACtion" method="{1}">
     <result>success.jsp</result>
     <result name="login">login.jsp</result>
     <interceptor-ref name="myStack" />
     <allowed-methods>add,del,find,update</allowed-methods>
</action>

一、Comparable 简介

官方文档: https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

Comparable 是排序接口。若一个类实现了 Comparable 接口,就意味着该类支持排序。实现了Comparable 接口的类的对象的列表或数组可以通过 Collections.sort 或 Arrays.sort 进行自动排序。
此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。该接口定义如下:

import java.util.*;

public interface Comparable<T> 
{
    public int compareTo(T o);
}

- 阅读剩余部分 -