当前位置: 首页 > 面试题库 >

字符串是Java中的对象,那么为什么不使用'new'创建它们呢?

云长恨
2023-03-14
问题内容

我们通常使用new关键字创建对象,例如:

Object obj = new Object();

字符串是对象,但是我们不能new用来创建它们:

String str = "Hello World";

为什么是这样?我可以用做一个琴弦new吗?


问题答案:

除了已经说过的内容外,Java中的字符串文字(即像Java 一样"abcd"但不喜欢的字符串)new String("abcd")是经过内插的-这意味着,每次引用“ abcd”时,你都将引用一个String实例,而不是一个新实例。每一次。因此,你将拥有:

String a = "abcd";
String b = "abcd";

a == b; //True

但是如果你有

String a = new String("abcd");
String b = new String("abcd");

那么就有可能

a == b; // False

(如果有人需要提醒,请务必使用.equals()比较字符串;==测试物理相等性)。

Interning String文字很好,因为它们经常被使用多次。例如,考虑(人为)代码:

for (int i = 0; i < 10; i++) {
  System.out.println("Next iteration");
}

如果没有String的内部,则“下一次迭代”将需要实例化10次,而现在只需要实例化一次。



 类似资料:
  • 我知道字符串文字和新字符串对象之间的区别,也知道它在内部是如何工作的。但我的问题是,这有点超前。当我们使用new关键字as创建字符串对象时 在本例中,我们传递的是字符串类型的参数。我的问题是这个字符串是在哪里生成的-堆还是字符串常量池还是其他地方? 据我所知,这个参数是一个字符串文字,所以它应该在字符串常量池中。如果是这样的话,那么intern方法的用途是什么?只需将变量str链接到常量池?因为“

  • 本文向大家介绍为什么字符串对象在Java中是不可变的?,包括了为什么字符串对象在Java中是不可变的?的使用技巧和注意事项,需要的朋友参考一下 通常,字符串用于表示重要细节,例如数据库连接URL,用户名密码等。字符串的不变性有助于使这些细节保持不变。 类似地,在加载类时,将String用作参数。那时,更改字符串可能会导致加载错误的类。 如果不可变,则变量(字符串)自动为线程安全的。

  • 我是java编程的新手。而且我不明白为什么string对象在Java中是不可变的。

  • 问题内容: 使Python字符串不可变的设计原因是什么?它如何使编程更容易? 我习惯于可变字符串,例如C语言中的可变字符串。我应该如何在没有可变字符串的情况下进行编程?有没有最佳做法? 问题答案: 收到字符串时,请确保它保持不变。假设您将使用字符串参数构造一个如下所示的字符串,然后修改该字符串;那么的名称就会突然更改: 使用可变的字符串,您必须一直制作副本,以防止发生不良情况。 它还使单个字符与长

  • 问题内容: 我了解JSON,但不了解JSONP。Wikipedia上有关JSON的文档是JSONP的最高搜索结果。它说: JSONP或“带填充的JSON”是JSON扩展,其中将前缀指定为调用本身的输入参数。 ??什么电话 这对我来说毫无意义。JSON是一种数据格式。没有电话 在第二个搜索结果是由某些人叫雷米,谁写的这个约JSONP: JSONP是脚本标记注入,它将响应从服务器传递到用户指定的函数。

  • 这里将创建两个对象,一个在堆内存中,另一个在字符串池中。 那么,方法有什么用呢?执行上述语句后,字符串将在堆和字符串池中可用