new SimpleDateFormat always returns same reference for a given dateFormat

前端 未结 3 655
暗喜
暗喜 2021-01-17 22:41


I was trying to replicate a bug by using the same instance of SimpleDateFormat across multiple threads. However I got stuck with another problem and did not find any

3条回答
  •  星月不相逢
    2021-01-17 23:29

    SimpleDateFormat nor DateFormat (SimpleDateFormat superclass) nor Format (DateFormat superclass) have a toString() implemented, so the toString() from the Object class is actually executed, whose code is :

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    

    Now, SimpleDateFormat hashCode is generated:

    public int hashCode()
    {
        return pattern.hashCode();
        // just enough fields for a reasonable distribution
    }
    

    Which means that if you create numerous SimpleDateFormat instances with the same pattern, like in your case, they will have the same hashCode and hence toString() will return the same for these instances.

    Moreover, as it has been spotted by rixmath, SimpleDateFormat instances with the same pattern will also be equal.

提交回复
热议问题