String在Java中表示为对象。因此,对象包含存储在对象内的实例变量中的值。对象还包含对对象进行操作的代码体。这些代码体称为方法。
包含相同类型的值和相同方法的对象被组合在一起成为类。可以将类视为这些对象的类型定义。因此,Java中的String如何表示?让我们考虑Java中的以下代码片段。
final public class Main
{
public static void main(String[] args)
{
String s="black lion";
String s1=new String(s);
System.out.println(s.toUpperCase());
System.out.println("black lion".toUpperCase());
System.out.println(s1.toUpperCase());
}
}
上面的代码在将其转换为大写后显示String。在此语句String s="black lion";
中,要分配的字符串在哪里。它是被分配到String类中的实例变量还是某个地方?并在本声明中"black lion".toUpperCase();
。它是String类的对象吗?怎么样?
答案 0 :(得分:5)
字符串是char[]
,其中包含一系列UTF-16 code units,该数组的int
偏移量,int
长度。
我认为你混淆的根源是
String s
创建一个分配到。
的字符串没有。它为字符串引用创建空间。分配副本引用,但不修改这些引用引用的对象。
你也应该知道
new String(s)
并没有真正做任何有用的事情。它只创建另一个由同一数组,偏移量和长度支持的实例s
。很少有理由这样做,因此被大多数Java程序员认为是不好的做法。
像"my string"
这样的Java双引号字符串实际上是对interned String
个实例的引用,因此"foo"
是对同一个String实例的引用,无论它出现多少次你的代码。
答案 1 :(得分:2)
字符串在Java中是不可变的,因此当您执行println
时,String
会创建一个新的toUpperCase
(以后会收集垃圾)。
答案 2 :(得分:1)
如果我得到你想知道的东西。 String对象由双引号"
表示。这称为字符串文字。