最近发四重新学习java的基础,从基本类型以及里面的各种方法开始看起,看的一本书《JAVA核心技术卷1,基础知识》,这是第十版,讲的JDK8的一些特性。
我在想我们创建对象的时候都是这样进行创建的
People p = new People();
Integer i = new Integer();
但是String 和基本类型可以这么写
int i = 1;
String s = "ssss";//这种写法,不是新创建的对象是在常量池中存放了一个ssss的字符串,在栈里面,如果没有引用则消失
String 还可以这么写
String s = new String();//新建了一个String的对象,这个是创建了一个新的String的对象,在堆里面,不用的时候由垃圾回收器进行回收
这里需要注意堆和栈的区别
看到String源码里面有了个这个方法:
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
这个构造方法作用是什么?构造方法传进来的参数的类型是他自己?
发现String这个类中有两个成员变量
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
其中第二个hash他描述的是hash值,表示的是什么意思?
下面是相应的方法
/**
* Returns a hash code for this string. The hash code for a
* <code>String</code> object is computed as
* <blockquote><pre>
* s[0]*31^(n-