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

Java字符串:“ String s = new String(“ silly”);”

司寇光华
2023-03-14
问题内容

我是学习Java的C ++人。我在读《有效的Java》,使我有些困惑。它说永远不要写这样的代码:

String s = new String("silly");

因为它创建了不必要的String对象。但是应该这样写:

String s = "No longer silly";

到目前为止还可以…但是,考虑到此类:

public final class CaseInsensitiveString {
    private String s;
    public CaseInsensitiveString(String s) {
        if (s == null) {
            throw new NullPointerException();
        }
        this.s = s;
    }
    :
    :
}
CaseInsensitiveString cis = new CaseInsensitiveString("Polish");
String s = "polish";

为什么第一个陈述可以?不是吗

CaseInsensitiveString cis = "Polish";

我如何使CaseInsensitiveString行为像String这样,使上面的语句可以正常运行(带有和不带有extend String)?字符串到底有什么用,它能够像这样传递文字就可以了吗?据我了解,Java中没有“复制构造函数”的概念吗?


问题答案:

String是该语言的特殊内置类。它是为String类只有在你应该避免说

String s = new String("Polish");

因为文字"Polish"已经是类型String,并且你正在创建一个多余的对象。对于其他班级,

CaseInsensitiveString cis = new CaseInsensitiveString("Polish");

是正确的(并且仅在这种情况下)要做的事情。



 类似资料:
  • 尽量使用字符串插值,而不是字符串拼接 # 错误 email_with_name = user.name + ' <' + user.email + '>' # 正确 email_with_name = "#{user.name} <#{user.email}>" 另外,记住 Ruby 1.9 风格的字符串插值。比如说你要构造出缓存的 key 名: CACHE_KEY = '_store' ca

  • Objective-C编程语言中的字符串使用NSString表示,其子类NSMutableString提供了几种创建字符串对象的方法。 创建字符串对象的最简单方法是使用Objective-C @“...”构造 - NSString *greeting = @"Hello"; 下面显示了创建和打印字符串的简单示例。 #import <Foundation/Foundation.h> int mai

  • Rexx中的字符串由一系列字符表示。 以下程序是字符串的示例 - /* Main program */ a = "This is a string" say a 上述计划的输出如下 - This is a string 让我们讨论Rexx中可用于字符串的一些方法。 Sr.No. Rexx for Strings中提供的方法 1 left 此方法从字符串的左侧返回一定数量的字符。 2 ri

  • 本章将向您介绍Scala字符串。 在Scala中,与Java一样,字符串是不可变对象,即无法修改的对象。 另一方面,可以修改的对象(如数组)称为可变对象。 字符串是非常有用的对象,在本节的其余部分中,我们提供了java.lang.String类的重要方法。 创建一个字符串 以下代码可用于创建字符串 - var greeting = "Hello world!"; or var greeting:S

  • 在VB.Net中,您可以使用字符串作为字符数组,但更常见的做法是使用String关键字来声明字符串变量。 string关键字是System.String类的别名。 创建一个String对象 您可以使用以下方法之一创建字符串对象 - 通过将字符串文字分配给String变量 通过使用String类构造函数 通过使用字符串连接运算符(+) 通过检索属性或调用返回字符串的方法 通过调用格式化方法将值或对象

  • String对象允许您使用一系列字符。 与大多数编程语言一样,CoffeeScript中的字符串使用引号声明为 - my_string = "Hello how are you" console.log my_string 在编译时,它将生成以下JavaScript代码。 // Generated by CoffeeScript 1.10.0 (function() { var my_str

  • 我们在前面的例子中已经使用了可变长度字符串。 可变长度字符串可以包含所需的字符数。 通常,我们通过两种方式之一指定字符串的长度 - 显式存储字符串长度 Using a sentinel character 我们可以使用$ location计数器符号显式存储字符串长度,该符号表示位置计数器的当前值。 在以下示例中 - msg db 'Hello, world!',0xa ;our dear st

  • 通过将字符串文本括在引号中,在Clojure中构造字符串文字。 Clojure中的字符串需要使用双引号构建,例如“Hello World”。 例子 (Example) 以下是Clojure中字符串用法的示例。 (ns clojure.examples.hello (:gen-class)) (defn hello-world [] (println "Hello World")