首先说明String是不可变类。一次创建将不能再修改,由于String是非可变的,所以每次对string的改变都要重新建立String对象,为了string对象的可利用性和jvm运行的高效。如果是s="abc",将直接在strings pool中进行查找是否存在相等的String,如果存在则直接利用,就不在创建。如果不存在则直接在strings pool中创建对象。如果用new创建对象,则和其他对象的创建一样在heap中创建。
对于此问题来说,则创建了两个string,第一个“abc”创建一个String在strings pool中,第二个是new 出来的String,将和其他对象new出来的对象一样创建在堆中。 str则指向堆中的对象。 |