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

Java 什么时候应该在String文字上使用String的内部方法

幸阳波
2023-03-14
问题内容

根据String#intern()intern如果在字符串池中找到字符串,则该方法应从字符串池返回字符串,否则,将在字符串池中添加新的字符串对象,并返回此字符串的引用。

所以我尝试了这个:

String s1 = "Rakesh";
String s2 = "Rakesh";
String s3 = "Rakesh".intern();

if ( s1 == s2 ){
    System.out.println("s1 and s2 are same");  // 1.
}

if ( s1 == s3 ){
    System.out.println("s1 and s3 are same" );  // 2.
}

我期望s1 and s3 are same在s3被实习生时将被打印,并且s1 and s2 are same不会被打印。但是结果是:两行都被打印了。因此,这意味着默认情况下会保留String常量。但是如果是这样,那为什么我们需要这种intern方法呢?换句话说,什么时候应该使用这种方法?


问题答案:

Java自动实习字符串文字。这意味着在许多情况下,==运算符似乎适用于Strings,其处理方式与ints或其他原始值的用法相同。

由于Interning对于String文字是自动的,因此该intern()方法将用于使用new String()

使用你的示例:

String s1 = "Rakesh";
String s2 = "Rakesh";
String s3 = "Rakesh".intern();
String s4 = new String("Rakesh");
String s5 = new String("Rakesh").intern();

if ( s1 == s2 ){
    System.out.println("s1 and s2 are same");  // 1.
}

if ( s1 == s3 ){
    System.out.println("s1 and s3 are same" );  // 2.
}

if ( s1 == s4 ){
    System.out.println("s1 and s4 are same" );  // 3.
}

if ( s1 == s5 ){
    System.out.println("s1 and s5 are same" );  // 4.
}

将返回:

s1 and s2 are same
s1 and s3 are same
s1 and s5 are same


 类似资料:
  • 问题内容: 使用CROSS APPLY的主要目的是什么? 我已经读过(模糊地通过Internet上的帖子),cross apply如果您要进行分区,则在选择大型数据集时可能会更有效率。(想起分页) 我也知道,CROSS APPLY不需要UDF作为右表。 在大多数INNER JOIN查询(一对多关系)中,我可以将它们重写为use CROSS APPLY,但它们始终会为我提供等效的执行计划。 任何人都

  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或

  • 问题内容: 我想知道什么时候应该包括外部脚本或将它们与html代码内联,以提高性能和简化维护。 一般做法是什么? 真实场景-我有几个需要客户端表单验证的html页面。为此,我使用了所有这些页面中都包含的jQuery插件。但是问题是,我是否: 编写代码位以内联方式配置此脚本? 在所有这些html页面之间共享的一个文件中包含所有位? 将每个位都包含在一个单独的外部文件中,每个html页面一个? 谢谢。

  • 本文向大家介绍什么是Java String文字?,包括了什么是Java String文字?的使用技巧和注意事项,需要的朋友参考一下 在Java编程中广泛使用的字符串是字符序列。在Java编程语言中,字符串被视为对象。Java平台提供String类来创建和操作字符串。 您也可以直接创建一个字符串作为- 字符串文字应使用双引号引起来。每当在代码中遇到字符串文字时,编译器都会创建一个String对象,其

  • 问题内容: 使用时收到以下警告: 我应该改用什么? 问题答案: 使用URLEncoder中的其他方法: 第一个参数是要编码的文本。第二个是要使用的字符编码的名称(例如)。例如: