很基础的一个有关问题,面试了十几个人既然没有一个做对

很基础的一个问题,面试了十几个人既然没有一个做对!
很基础的一个问题,面试了十几个人既然没有一个做对!
String st1[]={"aa","bb","cc","dd","ee","ff"};
    String st2[]=st1;
    st2[0]="00";
    System.out.println(st1[0]);
    System.out.println(st2[0]);
打印结果:
31 楼 yehengxy 2011-03-18  
肯定是00,对象引用的问题嘛 是吧
32 楼 Enjoy_show 2011-03-18  
LZ拿来面试难倒N个人的问题!到JE这里变得很是简单!!!!!!!还是JE上面高手多啊!
33 楼 wu520615 2011-03-19  
新手学习了,刚还找朋友给我解释了一下,看来书本还是要翻得仔细些!
34 楼 JesseYu 2011-03-23  
00 00我也做错了。。。悲剧啊。
35 楼 lxfstyle 2011-03-24  
这个难吗。。。很基础的一个有关问题,面试了十几个人既然没有一个做对
36 楼 thzthbthy 2011-03-25  
会混论坛的有几个不会先运行一下,然后回复?  
37 楼 jobar 2011-04-06  
String st1 = "aa";
        String st2 = st1;
        st2 = "00";
        System.out.println(st1);
        System.out.println(st2);

估计这个错的更多。。。
38 楼 weng 2011-04-07  
don888g 写道
很基础的一个问题,面试了十几个人既然没有一个做对!
String st1[]={"aa","bb","cc","dd","ee","ff"};
    String st2[]=st1;
    st2[0]="00";
    System.out.println(st1[0]);
    System.out.println(st2[0]);
打印结果:


两个引用指向同一个地址

打印结果应该是: 00
                 00
39 楼 zhonghuazhi 2011-04-07  
简单类型的话 两个值就不一样
非简单类型的话 两个值一样
40 楼 wstxdz1023 2011-04-11  
jobar 写道
String st1 = "aa";
        String st2 = st1;
        st2 = "00";
        System.out.println(st1);
        System.out.println(st2);

估计这个错的更多。。。


弱弱的问下,这个和数组的为什么不一样呢,新手学习下
41 楼 sbaiss 2011-04-11  
我成功的做错了
42 楼 raycode 2011-04-11  
jobar 写道
String st1 = "aa";
        String st2 = st1;
        st2 = "00";
        System.out.println(st1);
        System.out.println(st2);

估计这个错的更多。。。


在轻松的环境下,人思考得越周全...

面试的时候,精神状态会差些吧!

字符串不可变,如果从内存角度思考,会简单很多...
43 楼 zhouNN_mJ 2011-05-16  
zhonghuazhi 写道
简单类型的话 两个值就不一样
非简单类型的话 两个值一样

看了这个解释后,就知道楼主的问题和憨豆先生问题的区别了!
44 楼 hoolale 2011-05-24  
st2[0]="00",本身就错误。没有必要去讨论其他。
45 楼 hoolale 2011-05-24  
楼主的题目就是空中楼阁,不解释。
46 楼 KevinGarnett 2011-06-02  
don888g 写道
很基础的一个问题,面试了十几个人既然没有一个做对!
String st1[]={"aa","bb","cc","dd","ee","ff"};
    String st2[]=st1;
    st2[0]="00";
    System.out.println(st1[0]);
    System.out.println(st2[0]);
打印结果:


对java数组的内存分布不是特别了解,
st1,st2分配在栈中,他们都是指向那个对象数组的头部?还有,"aa","bb"等是在常量区,st2[0]指向"aa",st2[1]指向"bb",那么st2[0],st2[1]这些变量是分配在哪里的?

不知楼主能否详细解释下?
47 楼 gtssgtss 2011-06-02  
raycode 写道
jobar 写道
String st1 = "aa";
        String st2 = st1;
        st2 = "00";
        System.out.println(st1);
        System.out.println(st2);

估计这个错的更多。。。


在轻松的环境下,人思考得越周全...

面试的时候,精神状态会差些吧!

字符串不可变,如果从内存角度思考,会简单很多...


这和可变不可变完全没有关系
StringBuilder st1 = new StringBuilder("aa");
        StringBuilder st2 = st1;
        st2 = new StringBuilder("00");
        System.out.println(st1);
        System.out.println(st2);


结果一样
48 楼 ydwcn 2011-06-03  
这是面招的什么岗位啊。实习生吧?
49 楼 glc1237 2011-06-14  
<div class="quote_title">raycode 写道</div>
<div class="quote_div">
<div class="quote_title">jobar 写道</div>
<div class="quote_div">
<pre name="code" class="java">String st1 = "aa";
        String st2 = st1;
        st2 = "00";
        System.out.println(st1);
        System.out.println(st2);</pre>
<br>估计这个错的更多。。。</div>
<br><br>在轻松的环境下,人思考得越周全... <br><br>面试的时候,精神状态会差些吧! <br><br>字符串不可变,如果从内存角度思考,会简单很多... <br>
</div>
<p> </p>
<p> 这个是考察 对象创建和 LZ的 一起就是也考察 值传递了吧 </p>
<p>我的理解就是 LZ给的里面 创建了一个数组对象 str1,str2 都是指向 数据的引用 </p>
<p>在上面 有创建了 一个新的对象 s2 指向 新的对象 s1 还是指向原来的对象</p>
50 楼 benbenxiongyuan 2011-06-23  
没做对的话,基础还是不牢固。
如果对java虚拟机内存结果稍了解的话,应该能猜对。
堆和常量池。常量区值相同的只有一份实例。堆中每次new新生成不同的实例。