第一个赋值是把对象a指向caicai这个字符串,这个字符串放在常量池里面如果你new 一个的话,就重新生成了一个字符串,这个字符串放在堆里面
是的,常量池就是,如果以后你还这样生成一个对象的话,他会把那个对象的引用指向常量池里同一个对象比如String a="asdf";String b="asdf";这个时候a==b就是true,它们指向的是同一个对象如果String a="asdf";String b=new String("asdf");这个时候a==b就是false了,它们虽然字面值相同,但是指向不同的对象
楼上的说得好好,我得理论知识太查了