如果String和其他类一样,那么如何使用双引号初始化它?
字符串在JLS中得到特殊处理:它是存在文字的两个非原始类型之一(另一个是Class
)*。
从JLS:
字符串文字是对类`string[…]实例的引用。
*嗯,还有空类型,它是空字面值null
,但是大多数人不认为空类型是合适的类型。
Java将字符串视为一个特殊的类,可以用两种方式进行初始化
>
直接赋值
String a = "adsasdf";
与使用新关键字的其他对象一样
String a = new String("adsasdf");
当你想与==
符号进行比较时,需要特别小心:
String a = "asdf";
String b = "asdf";
System.out.println(a == b); // True
System.out.println(a.equals(b)); // True
String a = new String("asdf");
String b = new String("asdf");
System.out.println(a == b); // False
System.out.println(a.equals(b)); // True
这是因为在第一种情况下,对象a和b被保存在一个叫做文字池
的东西中,它们都引用同一个对象,所以它们在两方面都是相等的。
但是在第二种情况下,a和b引用不同的对象,就像我们初始化任何其他对象一样。所以当与==
运算符相比,它们是不相等的,而它们在值上是相等的。
Java字符串很特别
Java的设计者决定在面向对象的语言中保留原始类型,而不是让所有东西都成为对象,从而提高语言的性能。基元存储在调用堆栈中,它需要更少的存储空间,并且操作起来更便宜。另一方面,对象存储在程序堆中,需要复杂的内存管理和更多的存储空间。
出于性能原因,Java的字符串被设计为介于原语和类之间。
例如
String s1 = "Hello"; // String literal
String s2 = "Hello"; // String literal
String s3 = s1; // same reference
String s4 = new String("Hello"); // String object
String s5 = new String("Hello"); // String object
注意:字符串文本存储在公共池中。这有助于共享具有相同内容的字符串的存储空间,以节省存储空间<代码>字符串通过新建
操作符分配的对象存储在堆
中,对于相同的内容没有共享存储空间。
问题内容: 如果String和其他字符串一样是一个类,如何使用双引号将其初始化? 问题答案: Java的设计者决定保留面向对象语言中的原始类型,而不是将所有内容都变成对象,以提高语言的性能。原语存储在调用堆栈中,这需要较少的存储空间,并且操作成本较低。另一方面,对象存储在程序堆中,这需要复杂的内存管理和更多的存储空间。 出于性能原因,Java的String设计为介于基本体和类之间。 例如 注意:
问题内容: 为了将另一个问题分解为更小的部分,我尝试设置所有TextKit组件。但是,更改初始化方法后,我崩溃了。出于测试目的,我将该项目简化为以下内容: 崩溃时出现异常代码EXC_I386_GPFLT。该代码不是很明确。基本问题似乎归结为我如何初始化。 如果我更换 有了这个 然后就可以了。我究竟做错了什么? 问题答案: 看来,做事的方法是将NSLayoutManager添加到NSTextStor
考虑以下初始化: 在g 5.2.0中,编译器对falseString发出警告,而对trueString发出错误。 使用clang 3.6-std=c 11时,编译器会对假字符串和真字符串抛出错误。 Q1)为什么的行为不同,即使两个初始化值是相同的类型()? Q2)哪个编译器是正确的,为什么?标准怎么说? 编辑: 错误:从“bool”到“std::string”(又名“basic\u string”
问题内容: 我需要一个ConnectionFactory类型的实例字段。供应商可以做到: 可以将其缩短为一行,如下所示: 有没有办法使用lambda使其更简洁一些?我试过以下内容,但无法编译: 问题答案: 您上一个代码段中的问题是编译器无法猜测 是实现接口SAM的lambda表达式(似乎您首先错过了表达式的括号,但无论如何)。 您可以做的是强制转换lambda,以告知编译器这实际上是您实现的接口的
问题内容: 我不明白原始是如何转换为char数组的。如果我尝试使用其他代码,则会引发编译错误。 问题答案: 有两个属性: 因为您位于的构造函数中,所以您有权访问其私有字段和。 您无法从String类的外部访问这些字段,因此,如果尝试执行此操作,将抛出编译错误。
问题内容: 我一直在尝试从Swift中初始化一个字符串。 苹果在NSString Cocoa文档 中说您必须使用以下代码: 但是,苹果没有提供任何用法或放置示例的示例。 我正在尝试将以下代码从Objective-C转换为Swift 我一直在尝试许多可能的语法,例如以下语法(当然它不起作用): 问题答案: 这是您应该如何初始化: Swift 2.X或更旧版本 Swift 3或更高版本: 本文档说明了