84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
比如,
calendar.add(Calendar.DAY_OF_MONTH, amount); calendar.add(Calendar.DAY_OF_YEAR, amount);
如上,有何区别?
走同样的路,发现不同的人生
簡単に言えば、違いはありません。
Calendar クラスの add メソッドは抽象メソッドです。このメソッドを実装する JDK には、
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 の範囲を超えた場合でも、このメソッドは正しく処理されると思います。
ルール 1 を追加します。呼び出し後のフィールドの値から呼び出し前のフィールドの値を引いた値が、フィールドで発生したオーバーフローを除算した値になります。 オーバーフローは、フィールド値が範囲を超えたときに発生します。 、結果として、次に大きいフィールドが増分または減分され、フィールド値がその範囲内に調整されます。
以前の値と等しくなることが不可能である場合、その値は、期待される値にできるだけ近くなるように調整されます。フィールドは、DAY_OF_MONTH よりも小さい時間単位を表します。 不変であると期待されていません。どのフィールドが不変であると期待されるかはカレンダー システムによって決まります。
簡単に言えば、違いはありません。
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 つのルールは、この範囲外の状態を説明できます。
ただし、可読性の観点からは、適切なパラメータを使用する方が良いでしょう。