今SJC-P対策用の参考書でJavaを勉強してるんですが、
ラッパークラスのオブジェクトの生成について質問があります。

valueOfを使って生成する際、ある参考書には
Integer i = Integer.valueOf(10);
は("10");にしないとコンパイルエラーになると書いていまして、

ある参考書にはvalueOfメソッドは値からオブジェクトを生成する場合にも利用される
(例)Integer i = Integer.valueOf(40);
とあり一体どっちが正しいのだろうと困っています。

valueOfでオブジェクトを生成する場合は必ず文字列じゃなければいけないのか、それとも
文字列、数値どちらを引数にしても生成できるのか、どっちなんでしょうか。

Integer i = Integer.valueOf(10);
はコンパイルエラーになるんですか??