基础不行public class Test1 { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "hello world.";

String[] ss = {s,null};

s = null;

System.out.println(ss[0]);
}}
打印出:
hello world.

解决方案 »

  1.   

    s刚开始不是new出来的,指向的字符串保存在字符串池中
      

  2.   

    楼主想问啥?
    打印结果?0.0
    ss[0]已经被赋值为hello world,s改变跟他没关系了。
      

  3.   

    实践证明,new出来还是一样打印hello world.
      

  4.   

    好像没有什么说的呀!String[] ss = {s,null};//定义ss为数组,并引用数组{s,null}
    s = null;//s变量设为空
    System.out.println(ss[0]);//打印ss数组第一个元素
      

  5.   

    String s = "hello world.";
            
    内存中开辟了两个地方,一个放引用值“s” 1号
    一个地方放常量"hello world."         2号
    s指向"hello world."  1号指向2号
    String[] ss = {s,null};
    内存中开辟了三个地方,一个放引用值“ss” 3号
    一个地方放常量"{s,null};             4号
    一个地方存放“null”                   5号
    3号指向4号
    其中s指向"hello world." 
    null指向 5号
    所以实际上3号指向的是4和5号 s = null;
    将1号指向该为了5号
    而“ss” 3号的指向没有变动
    所以最后输出的是hello world.这就是java中的引用,指针
      

  6.   

    数组ss的第一个地址指向"hello world.",即使后面s=null也只是改变了s指针,没有改变数组,所以不变
      

  7.   

    就是不是String,结果也一样,以 Socket为例
    Socket a = new Socket(。);
    Socket array={a, null}; 《==就是把a的值付给array[0]了吗a = new Socket(...); <==a又重新指向一个新的socket你还可以写;
    array = new Socket[10];
    a = new Socket(...); array[0] = a;
    a = new Socket(...); array[1] = a;
    ......
    a = new Socket(...); array[9] = a;我们经常这么做啊,先用一个临时变量保存新生成的Socket,然后用a初始化它的各项参数,完了放在数组或者链表中。换个写法,可以改内容的:Socket a = new Socket();
    Socket array[] = {a, null};
    system.out.println(array[0].isConnected());
    ....
    a.connect();
    system.out.println(array[0].isConnected());
      

  8.   

    数组也相当于对象  然后里面的元素就是它的属性 所以ss[0]存放的就是"hello world."的地址 
      

  9.   

    s的值已经赋给ss[0],s再变为其他的值和ss[0]没关了,呵呵
      

  10.   

    你把两句话:
     String[] ss = {s,null};
            
            s = null;颠倒过来就知道怎么回事了··
      

  11.   

    String s = "hello world.";
       
    内存中开辟了两个地方,一个放引用值“s” 1号
    一个地方放常量"hello world." 2号
    s指向"hello world." 1号指向2号
    String[] ss = {s,null};
    内存中开辟了三个地方,一个放引用值“ss” 3号
    一个地方放常量"{s,null}; 4号
    一个地方存放“null” 5号
    3号指向4号
    其中s指向"hello world." 
    null指向 5号
    所以实际上3号指向的是4和5号 s = null;
    将1号指向该为了5号
    而“ss” 3号的指向没有变动
    所以最后输出的是hello world.
      

  12.   

    String s = "hello world.";
       
    内存中开辟了两个地方,一个放引用值“s” 1号
    一个地方放常量"hello world." 2号
    s指向"hello world." 1号指向2号
    String[] ss = {s,null};
    内存中开辟了三个地方,一个放引用值“ss” 3号
    一个地方放常量"{s,null}; 4号
    一个地方存放“null” 5号
    3号指向4号
    其中s指向"hello world." 
    null指向 5号
    所以实际上3号指向的是4和5号 s = null;
    将1号指向该为了5号
    而“ss” 3号的指向没有变动
    所以最后输出的是hello world.
      

  13.   

    s = NULL并没有释放"hello world."的内存 - -
      

  14.   

    String 是final的 “Hello World”本身有自己的位置
      

  15.   

      如果  String s = "hello world.";  换成对象 Object o = new Object();
    结果也是这样 , 怎么解释 ???
      

  16.   

    初学者都容易犯的指针问题
    请参考
    http://topic.csdn.net/u/20101012/16/5a3f6b6c-17a6-4590-a776-020b679d1a78.html
      

  17.   

    s一开始指向的是 "hello world"
    然后把s的内容给了ss[0]
    最后把s又指向了 null
    但是ss[0]指向的还是"hello world"这么理解吧,s和ss[0]都是指针,我们只改变了指针指向的的内容而已
      

  18.   

    1、String s = "hello world.";
    s是引用指向String 对象,String对象存了hell world
    2、String [] ss = {s,null};
    引用s的复制
    3、s = null,引用s置成null,1中的String对象未销毁
    4、System.out.println(ss[0]);
    ss[0]所指向的对象存的还是hello world,输出hello world菜鸟路过!
      

  19.   

    String[] ss = {s,null};
    在形成的class的时候,就把S的所指的字符串引用就赋值到数组中,以后改变s的引用,数组中的以前那个字符串是不变的,java中的STRING是不可变的
      

  20.   

    存在哪里都一样,s只是一个引用罢了,指向hello world,然后数组定义的时候将ss[0]和s引用同一个hello world,下面的s = null只是让s不引用hello world,但是不改变ss[0]的引用