Java 如何创建一个String

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 如何创建一个String相关的知识,希望对你有一定的参考价值。

当执行这行代码时,String str = new String("ABCD"); Java会调用String的这个构造方法
public String(String original)
int size = original.count;
char[] originalValue = original.value;
char[] v;
if (originalValue.length > size)
// The array representing the String is bigger than the new
// String itself. Perhaps this constructor is being called
// in order to trim the baggage, so make a copy of the array.
int off = original.offset;
v = Arrays.copyOfRange(originalValue, off, off+size);
else
// The array representing the String is the same
// size as the String, so no point in making a copy.
v = originalValue;

this.offset = 0;
this.count = size;
this.value = v;

但是,始终不明白 original.count 从何而来呢?找遍整个Java类,也没有看到初始化original.count 的代码。如果是JVM 完成的,那它又是如何做的呢?请哪位高手指点一下!

count 是String类的静态变量 int类型 ,你看源码不能只看这个构造方法啊,构造方法回调用类里面的其他变量追问

当然有看其他变量,count在类中没有找到它做初始化的地方。我是针对 public String(String original)
//.......

这个构造方法而言。

追答

private final int count;
不赋值 java 默认 int 就是 0 ;

追问

这个是知道的,但是
int size = original.count;
的original.count 是何时初始化的呢?是0吗,是4吗?

追答

original.count = 4
original.value = ABCD
要知道为什么就要看 String 里面的英文注解

参考技术A 这里original表示字符串常量,original.count和original.value都是它的属性,前者表示他的长度,后者表示它的值追问

但是original.count的值是从何而来呢?它又是在何处、如何初始化的呢?

参考技术B 扯淡
怎么没有
/** The count is the number of characters in the String. */
private int count;追问

你可知道它何时初始化的?
int size = original.count;
的original.count 是何时初始化的呢?是0吗,是4吗?

参考技术C -.-!original是一个对象副本,已经初始化了,只是里面的变量都没有设置而已~~追问

它是在何时初始化的,又是如何初始化的呢?

以上是关于Java 如何创建一个String的主要内容,如果未能解决你的问题,请参考以下文章

java中string类创建对象

如何创建Map集合?

如何创建一个接受可变数量参数的 Java 方法?

java中StringBuffer与String创建对象问题???

如何在Java中正确定义多维通用集合?

java中创建一个String 问题