0

在此处输入图像描述1 -s.concat()

2 -s.toUpperCase()

3 -s.replace()

4 -s.valueOf()

这里 none 不是一个选项,人们的得分是 100%,所以我假设每个操作都将返回值分配给 s。

我看到了所有方法的代码。全部返回new string()但是根据techgig,这个答案是错误的。

根据我的理解,所有 4 都应该导致对象引用发生变化。但根据techgig,它是错误的。

对于测验问题,请按照以下步骤操作:-

  • 访问TechGig
  • 登录进去
  • 打开练习标签
  • 转到 java 部分
  • 开放式介绍基础级别
4

3 回答 3

2
  • 根据我的知识和研究,您问题的正确答案是s.concat()s.toUpperCase()。正如你所说,许多程序员得分 100%,所以你可以试试这个。您还将获得 100% 的分数。此外,我在测验中获得了 100% 的分数。
  • 具有相同内容的字符串字面量共享存储在一个公共池中,Java 的 String 被设计为不可变的。举个例子
    String s1 = "Java"
    String s2 = "Java"

  • 两者都s1指向s2相同的内存空间,即构造一个字符串,它的内容不能被修改。否则,共享相同存储位置的其他字符串引用将受到影响。

  • toUpperCase() 之类的方法可能会修改 String 对象的内容。事实上,一个全新的 String 对象被创建并返回给调用者。一旦没有更多的引用,原始的 String 对象将被释放,随后被垃圾回收。

  • 在许多测验中都提出了您的问题,我发现一些页面给出了答案但没有任何解释。你可以在这个这个网站上查看答案。

参考Java字符串教程

于 2020-05-08T16:45:20.483 回答
1

此方法都不会更改 引用的 String 对象s,因为String对象是不可变的。因此,无论您执行什么功能,它都会创建一个新String对象,您可以将其分配给其他引用或s自身。当您将这个新创建的对象分配给 时ss引用将指向这个新对象。

例如:

String s  = "hello";
//Now perform all four operation one by one
s.concat("world");
s.toUpperCase();
s.replcae("l", "m");
s.valueOf(true);

System.out.println(s);

即使在所有这些操作之后,输出也会是:你好

于 2019-09-13T17:47:37.310 回答
1

所有选项s.toUpperCase()都将抛出编译错误,因为它们需要参数。也许这个问题想让你注意到这一点并标记那个选项。当然,就像许多人注意到的那样,String它是不可变的,因此不可能更改一个String对象,但是您可以更改s变量以具有另一个String引用,并且由于没有s = new String();任何地方发生,因此这个问题可能是错误的。

于 2019-09-13T18:46:50.907 回答