[解決済み】System.out.print()はどのように機能するのですか?
質問
私はかなり長い間、Javaを使用してきました。
System.out.print()
が動作します。
ここで、私の疑問があります。
関数である以上、その宣言は イオ パッケージで提供されます。しかし、この関数はどんな数の引数でも、どんな引数の型でも、どのように並べても取り込むことができるので、Javaの開発者はどのようにしたのでしょうか? 例えば、以下のように。
System.out.print("Hello World");
System.out.print("My name is" + foo);
System.out.print("Sum of " + a + "and " + b + "is " + c);
System.out.print("Total USD is " + usd);
変数のデータ型が何であっても
a, b, c, usd, foo
またはどのように渡されるかを指定します。
System.out.print()
は決してエラーを投げない。
私としては、このような要件のプロジェクトに携わったことはありません。もし、このような要件があった場合、どのように解決したらいいのかわからないのです。
どなたか説明していただけませんか?
どのように解決するのですか?
System.out
のインスタンスに過ぎません。
PrintStream
. その
JavaDoc
. その可変性は
メソッドのオーバーロード
(同じ名前で、異なるパラメータを持つ複数のメソッド)。
このプリントストリームは、その出力を、いわゆる 標準出力 .
ご質問の中で、以下のようなテクニックが紹介されています。
バリアディック関数
(または
ヴァーラグ
). 残念ながらそれは
PrintStream#print
ということで、何かと勘違いしているようですね。しかし、これらをJavaで実装するのは非常に簡単です。
ドキュメントを確認するだけです。
また、Java が文字列でない変数の連結をどのように行っているのか気になる方は
"foo" + 1 + true + myObj
それは、主にJavaコンパイラの責任です。
連結に変数が含まれない場合、コンパイラは単に文字列を連結する。変数がある場合、連結は次のように変換される。
StringBuilder#append
を連鎖させます。結果のバイトコードには連結命令はありません。
+
演算子(文字列の連結について話す場合)はコンパイル時に解決されます。
Java のすべての型は、文字列に変換することができます (
int
のメソッドを介して
Integer
クラスがあります。
boolean
のメソッドを介して
Boolean
クラス、オブジェクトはそれ自身の
#toString
, ...). 興味のある方はStringBuilderのソースコードをご覧ください。
UPDATEです。
自分でも気になったので調べてみました(
ジャバップ
) 私の例の
System.out.println("foo" + 1 + true + myObj)
にコンパイルされます。その結果
System.out.println(new StringBuilder("foo1true").append(myObj).toString());
関連
-
[解決済み] java.util.MissingFormatArgumentException: 形式指定子 '%s' がありません。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] Maven: assembly-pluginが全く実行されない
-
[解決済み] 文字列の巻き方
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] Javaでdoubleをfloatに変換する