代码里的s1是个对象引用,我想知道s1到底是个啥,是个指针,是个对象名称,还是个别的啥?
可以理解为指针的,s1指向一个存储string的内存块看到书中说“123” 是放在堆里的   难道java又开创了内存使用的新规范?
JVM的内存是分类别的,不同的数据放在不同的分类里分开使用。  这种“123” 不是都存在于常量存储区的?
这个场景里的123是在常量存储区的,对应JVM的方法区new String("123");是放在堆里的没错,我想知道直接赋值的这个常量是放在堆里的?是书里讲错了还是我凹凸了?
123放在常量存储区,但是new String的语义是在堆里重新开辟一个内存块,然后把常量存储区里的123拷贝过来。直接赋值的常量,s1是指向常量存储区的。常量没放在堆里,是指针指向了常量存储区