当前位置: 代码迷 >> J2SE >> 生手求教育
  详细解决方案

生手求教育

热度:63   发布时间:2016-04-23 20:39:47.0
新手求教育

public class MyClass
{
     public static void main( String args[])
    {
        String s1 = "123"; 
    }
}


C++ 阵营转过来的

刚学Java     代码里的s1是个对象引用,我想知道s1到底是个啥,是个指针,是个对象名称,还是个别的啥?
看到书中说“123” 是放在堆里的   难道java又开创了内存使用的新规范?  这种“123” 不是都存在于常量存储区的?
new String("123");是放在堆里的没错,我想知道直接赋值的这个常量是放在堆里的?是书里讲错了还是我凹凸了?

不知道底层怎么实现的却在用感觉很不爽,还是习惯C++
------解决方案--------------------
代码里的s1是个对象引用,我想知道s1到底是个啥,是个指针,是个对象名称,还是个别的啥?
可以理解为指针的,s1指向一个存储string的内存块

看到书中说“123” 是放在堆里的   难道java又开创了内存使用的新规范?
JVM的内存是分类别的,不同的数据放在不同的分类里分开使用。

  这种“123” 不是都存在于常量存储区的?
这个场景里的123是在常量存储区的,对应JVM的方法区

new String("123");是放在堆里的没错,我想知道直接赋值的这个常量是放在堆里的?是书里讲错了还是我凹凸了?
123放在常量存储区,但是new String的语义是在堆里重新开辟一个内存块,然后把常量存储区里的123拷贝过来。直接赋值的常量,s1是指向常量存储区的。常量没放在堆里,是指针指向了常量存储区
  相关解决方案