1、基本数据类型存放的都是栈中,String s = "a"; 存放栈String池中
2、所有new出来的对象都是存放堆中,以下都是
Object o = new Object();
String s = new String("a");
在创建对象的时候,先去查找String Pool中查找是否有"a"这个字符串,没有就新建,有则把该字符串的内存地址返回。
String的intern方法就是返回String Pool中的引用
package com.test;
/**
* @author Administrator
* @date 2018/6/10
*/
public class TestHashCodeAndEquals {
public static void main(String[] args) {
Student student1 = new Student();
Student student2 = new Student();
System.out.println("student1 == student2 :"+(student1 == student2));
String s1 = new String("test");
String s2 = new String("test");
System.out.println("s1 == s2 :" + (s1 == s2));
String s3 = "test";
String s4 = "test";
System.out.println("s3 == s4 :" + (s3 == s4));
System.out.println("s1 == s3 :" + (s1 == s3));
String s5 = s3 + s4;
String s6 = "testtest";
System.out.println("s5 == s6 :" + (s5 == s6));
System.out.println("s5 intern == s6 :" + (s5.intern() == s6));
// intern 表示String Pool的用法 所有 String s = "a";用法都是调用intern方法
System.out.println(s5.intern());
System.out.println(s6.intern());
String s7 = "test" + "test";
String s8 = "testtest";
System.out.println("s7 == s8 :" + (s7 == s8));
}
}
class Student{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}