Java中的字符串表示
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类的对象吗? 怎么样?
字符串是包含一系列UTF-16代码单元的char[]
,该数组的int
偏移量和int
长度。
我认为你混淆的根源是这个想法
String s
创建一个分配到的字符串。
它不是。 它为字符串引用创建空间。 分配副本引用,但不修改这些引用引用的对象。
你也应该意识到这一点
new String(s)
并没有真正做任何有用的事情。 它只创建另一个由s
,相同的数组,偏移量和长度支持的实例。 很少有理由这样做,因此大多数Java程序员认为这是不好的做法。
像"my string"
这样的Java双引号字符串实际上是对实例化String
实例的引用,因此"foo"
是对同一String实例的引用,无论它在代码中显示多少次。
字符串在Java中是不可变的,因此当您执行println
, toUpperCase
会创建一个新的String
(以后会收集垃圾)。
如果我得到你想知道的东西。 String对象由双引号"
。这称为字符串文字。