输出结果是a
这是因为java中传递的是变量的值,而不是变量的指针,所以你将传入的对象变量设置为null,是不会影响到外部变量的指向的.
这是因为java中传递的是变量的值,而不是变量的指针,所以你将传入的对象变量设置为null,是不会影响到外部变量的指向的.
解决方案 »
- JAVA的四层次:private > package > protect >public, 从低到高.是不是??
- java问题
- String cc = aa.replaceAll("\\+","");
- 大哥,大姐,我老迷糊了,连接SQL数据库就是不好使啊?
- 谁有java Swing教程,
- 为了迅速提高各位初学者的java水平,我想在网上和大家联系!想开发几个小型项目!
- 在jbuilder中将一个类文件换名之后,就不能成功编辑了,为什么,有解决方法吗??100分
- 考考你的逻辑分析能力(很难的题目:))
- 在jBuilder中如何将一个已存在的包添加到另一个project中?
- 使用jdbc时,插入汉字不行
- java如何处理HTML文件?在线给分,谢谢
- 谁有VSS的使用说明文档?可以给我发一份吗?
java传递的是引用和值。
Test是引用类型,传递的是引用。
我的理解是这样的。test t = new test();
变量t指向Test实例。
t--->test实例。
t.change(t),在方法内ss变量也指向t。
变成t--->test实例<----ss
方法执行ss=null;是将ss指为空。
变成t-->test实例,ss为空。
很容易验证。如果照楼上的说。
我们把ss=null;改成ss.s="b";同样不会改变。但实际上会打印 a b.因为
t.change(t),在方法内ss变量也指向t。
变成t--->test实例<----ss
ss.s与t.s是指向同一个地址的。
关键是指向 = 与 . 操作的不同。
理由同haichuang(不戒和尚)
这是因为java中传递的是变量的值,而不是变量的指针,所以你将传入的对象变量设置为null,是不会影响到外部变量的指向的.
如果是类类型则是传递引用
传递后两个引用都应用同一个对象,这时候如果只是将其中一个引用指向另一个对象,则对另一个引用不产生影响
而如果对其中一个引用做改变,则两个引用都将改变在上边的例子中正是将引用指向了另一个对象(NULL),所以另一个引用不受影响
所以最后的输出结果是a a
public class test {
String s = "a";
private void change (test ss) {
ss.s = null;//update
}
public static void main(String args[]) {
test t = new test();
System.out.println(t.s);
t.change(t);
System.out.println(t.s);
}
}
因为在他的程序中对其中的一个引用做了改变(ss.s = null),所以两个引用都改变了
String s = "a";
private test change1 (test ss) {
ss = null;
return ss;
}
private test change2 (test ss) {
return ss;
}
public static void main(String args[]) {
test t = new test();
System.out.println(t.s);
test t2 = t.change1(t);
System.out.println(t2==null);
System.out.println(t.equals(t2));
test t3 = t.change2(t);
System.out.println(t3==null);
System.out.println(t.equals(t3));
}
}输出结果:a
true
false
false
true
ss = null;
return ss;
}
就不会出现刚才的情况了
每个值都有一个准确的类型,完全定义了值的表示形式和针对值定义的操作。自描述类型的值称为对象。通过检查值,总是可以确定对象的准确类型,但却不能这样处理值类型和指针类型。值可以有多种类型。一种实现某一接口的类型,其值也是该接口类型的值。同样,从某一基本类型派生的类型,其值也是该基本类型的值。
String s = "a";
private void change (test ss) {
ss = null;l
}
public static void main(String args[]) {
test t = new test();
System.out.println(t.s);
t.change(t);
System.out.println(t.s);
}
}
肯定是a a.