基础不行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.
* @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.
打印结果?0.0
ss[0]已经被赋值为hello world,s改变跟他没关系了。
s = null;//s变量设为空
System.out.println(ss[0]);//打印ss数组第一个元素
内存中开辟了两个地方,一个放引用值“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中的引用,指针
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());
String[] ss = {s,null};
s = null;颠倒过来就知道怎么回事了··
内存中开辟了两个地方,一个放引用值“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.
内存中开辟了两个地方,一个放引用值“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.
结果也是这样 , 怎么解释 ???
请参考
http://topic.csdn.net/u/20101012/16/5a3f6b6c-17a6-4590-a776-020b679d1a78.html
然后把s的内容给了ss[0]
最后把s又指向了 null
但是ss[0]指向的还是"hello world"这么理解吧,s和ss[0]都是指针,我们只改变了指针指向的的内容而已
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菜鸟路过!
在形成的class的时候,就把S的所指的字符串引用就赋值到数组中,以后改变s的引用,数组中的以前那个字符串是不变的,java中的STRING是不可变的