質問: str1.replace('u','a'); System.out.printf(”%2$s %3$s %1$s ”,str1,str2); } } こういったように迷いがちです。 アドバイス頂けると有難いです。よろしくお願いします。
回答: これを「引数が足りない」と判断できるのは、我々がprintfの仕様を知っているからです。 文字列の中で % で始まるところがプレースホルダであり、これを見つけるたびに可変長引数から一つずつ読み取る、という仕様をです。 ところがprintfメソッドの外形的な仕様、「シグネチャ」として定義されているのは「最初にString、あとはObject型を0個以上」とだけです。コンパイル時に判定できるのはこのシグネチャに合っているかどうかだけですから、通過するわけです。 我々と同程度にprintfの仕様を理解して静的に間違いを指摘してくれるようなツールも存在します。そうしたツールはlintと総称されます。