比如,
calendar.add(Calendar.DAY_OF_MONTH, amount);
calendar.add(Calendar.DAY_OF_YEAR, amount);
如上,有何区别?
黄舟2017-04-17 16:43:59
簡単に言えば、違いはありません。
Calendar クラスの add メソッドは抽象メソッドです。このメソッドを実装する JDK には、
という 3 つのクラスがあります。java.util.JapaneseImperialCalendar
java.util.GregorianCalendar
sun.util.BuddhistCalendar
3 番目のコードは無視し、最初の 2 つの実装クラスのみを見てください。
というコードがあります。 リーリー一見したところ、ブレーク後の実行ブランチはこれら 3 つのタイプを区別しません。
量は、次の呼び出しなど、最初のパラメータのスコープによって制限されないようです:
calendar.add(Calendar.DAY_OF_MONTH, 100);
最終結果の day_of_year が依然として 100 日増加していることがわかります。
このメソッドの API で説明されている 2 つのルールは、この範囲外の状態を説明できます。
ただし、可読性の観点からは、適切なパラメータを使用する方が良いでしょう。ルール 1 を追加します。呼び出し後のフィールドの値から呼び出し前のフィールドの値を引いた値が、
ルール 2 を追加します。小さいフィールドは不変であると予想されるが、フィールドの変更後に最小値または最大値が変化したため、
フィールドで発生したオーバーフローを除算した値になります。 オーバーフローは、フィールド値が範囲を超えたときに発生します。 、
結果として、次に大きいフィールドが増分または減分され、
フィールド値がその範囲内に調整されます。
以前の値と等しくなることが不可能である場合
したがって、量が day_of_month の範囲を超えた場合でも、このメソッドは正しく処理されると思います。
、その値は、期待される値にできるだけ近くなるように調整されます。
フィールドは、
DAY_OF_MONTH よりも小さい時間単位を表します。
不変であると期待されていません。
どのフィールドが不変であると期待されるかはカレンダー システムによって決まります。