仕様ページを見ると、 Integer.toHexString() が呼び出され%h
ていることがわかりますが、2 つの指定子の間に実際的な違いは見つかりません。
同じ入力で to 指定子を使用すると異なる結果が得られる例を挙げていただけますか?
System.out.println(String.format("%1$h %1$x", 123));
これは印刷します
7b 7b
あなたが提供したページには次のように記載されています:
'h' 引数 arg が null の場合、結果は "null" になります。それ以外の場合は、Integer.toHexString(arg.hashCode()) を呼び出して結果を取得します。
と
'x' 結果は 16 進数の整数としてフォーマットされます
したがって、提供されたオブジェクトが である場合は出力され%h
、そうでない場合はオブジェクトのハッシュ コードが出力されます。一方、提供された値の16進値を出力し ます。null
null
%h
%x
int
編集:コメントで指摘されているように:値%x
が指定されていない場合IllegalFormatConversionException
、ここに記載されているようにスローされます:
フォーマット指定子に、対応する引数に適用できない変換文字が含まれている場合、IllegalFormatConversionException がスローされます。
つまり、基本的には、提供されたページを読むだけで済みます... :)