4

宿題を手伝うために質問があります。文字列リテラルを使用してプログラムを作成し、それを逆に出力する必要がありました。私はそれを書いてうまく動作しますが、私は2つの異なるバージョンを持っています. 1 つ目はスキャナーを使用するため、ユーザーは文字列を入力でき、逆に印刷されます。2 番目では、文字列リテラルを宣言し、それを逆に出力します。

私の質問は、正常に動作する私のプログラムに関するものではなく、入力された文字列が文字列リテラルであると述べているオンラインまたは本のどこにも見つかりません。文字列リテラルは通常次のように記述されることを理解しています

String a = "Welcome to Java"

しかし、次のように書くことができます

String a = new String("Welcome to Java") 
  • それでは、入力された文字列は文字列リテラルと同じではありませんか?
  • 文字列リテラルと見なすには、引用符で囲む必要がありますか?

私の本には基本的に引用符で囲む必要があると書かれているので、答えはイエスだと思いますが、課題を提出する前に、正しいバージョンを提出していることを再確認したいと思います。明確にしていただきありがとうございます。

4

4 に答える 4

7

文字列リテラルは、引用符で囲まれ、文字通りコード内にあるものです。

String literal = "string literal";

入力文字列は文字列リテラルではなく、単なる文字列です。

于 2012-08-05T00:41:23.910 に答える
3

@Shakedown が示すように、文字列リテラルは Java ソース コードの構文要素です。また、(大まかな意味で)プログラムの実行時にそのリテラルに対応するStringJavaオブジェクトでもあります。リテラルはランタイム文字列を表すと言えます。さらに、JLS は、単純なプログラム実行のコンテキストでは、同じ文字を持つ 2 つの文字列リテラルが同じ String オブジェクトを表すことを指定しています。

コード スニペットで。

String a = "Welcome to Java";

String a = new String("Welcome to Java");

..."Welcome to Java"ソースコードの文字シーケンスは両方とも String リテラルであり、同じ実行で使用されると仮定すると、同じ (インターンされた) String オブジェクトを示します。

ただし、new String("Welcome to Java")文字列リテラルではありません。String新しいオブジェクトを作成する式です。そして、その式を実行した結果は、リテラルが示したものとは異なるオブジェクトになることが保証されています。 String


文字列リテラルと見なすには、引用符で囲む必要がありますか?

はい。さらに、文字列リテラルとして認定する には、プログラムのソース コード内で引用符で囲む必要があります。

GUI からの使用入力を受け入れるプログラムを作成し、ユーザーが入力を二重引用符で囲んで入力した場合、それは文字列リテラルではありません。むしろ、Stringたまたま二重引用符文字で開始および終了する です。(はい ... この場合、文字列のには引用符が含まれます。)

于 2012-08-05T01:36:24.877 に答える
1

文字列リテラル ( "foo bar baz") はStringオブジェクトです。これは、そのようなオブジェクトを作成するための優れた構文です。ユーザーから入力を取得すると、それもStringオブジェクトになります。つまり、そのリテラルと同じ型です。

ただし、文字列リテラルは、オブジェクトの型ではなく、その構文 (引用符で囲まれたもの) を参照します。したがって、質問に正確に答えるために、ユーザーの入力は文字列リテラルではありません。

于 2012-08-05T00:41:25.270 に答える
1

入力された文字列は、文字列リテラルと同じです。

Java では、文字列は class のオブジェクトとして格納されますString。これを取得する 1 つの方法は、文字列リテラルです。"hello sailor" は文字列リテラルであり、Java 式で使用すると、 class のオブジェクトになりますString。文字列を返すメソッドは、 class のオブジェクトも返しますString。したがって、それらはすべての目的で同等です。

リテラルと a を区別する方法はいくつかありますがnew String("...")、それらはかなり不自然です。初心者として、それらについて心配する必要はありません。

于 2012-08-05T00:41:45.937 に答える