4

我有一个问题要帮我做作业。我们将使用字符串文字编写一个程序并反向打印它。我写了它,它工作正常,但我有两个不同的版本。第一个使用扫描仪,因此用户可以输入字符串,然后反向打印。在第二个中,我声明了一个字符串文字并反向打印。

我的问题不在于我的程序运行良好,而是我在网上或我的书中找不到任何地方说输入的字符串是字符串文字。我知道字符串文字通常写成

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 源代码的句法元素。当你的程序被执行时,它也是(在松散的意义上)一个对应String于该字面量的 Java对象。我们可以说字面量表示运行时字符串。此外,JLS 指定两个具有相同字符的字符串文字将在简单程序执行的上下文中表示相同的字符串对象。

在您的代码片段中。

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。一种获取方式是字符串文字:“hellosailor”是字符串文字,在 Java 表达式中使用时,它是 class 的对象String。返回字符串的方法也返回类的对象String。所以它们在所有方面都是等价的。

有一些方法可以从 a 中区分文字new String("..."),但这些方法相当做作。作为初学者,您不必担心这些。

于 2012-08-05T00:41:45.937 回答