关于java中的参数传递
问题的引入是因为下午在群里看到了一个网友的问题:
给定如下Java 代码,编译运行后,输出结果是( )。
public class Test {
public static void main(String [ ] args) {
StringBuffer a = new StringBuffer(“A”);
StringBuffer b = new StringBuffer(“B”);
operate(a , b);
System.out.println(a + ”,” + b);
}
static void operate(StringBuffer x , StringBuffer y) {
x.append(y);
y = x;
}
}
A. A,B B. AB,B C. A,AB D.AB,AB
朋友可以猜猜这个答案,我也想告诉大家,答案是:B。也许有人会很惊讶,也许有人会很淡定。因为StringBuffer是一个类,对于类的使用,通过new,在堆中创建一个类的实例,利用一个引用来实现对这个对象的操作。当把一个引用当作参数传递到一个函数中的时候,C++采取的是:这个参数是一个地址。而在java中没有地址这个概念,一切都是值传递,那么这里又是怎么控制的。
首先,我做了一个测试:
public class Text {
public static void main(String[] args) {
String s = "b";
f(s);
System.out.println(s);
}
static void f(String s) {
s = "c";
}
} /* output
b
*///~
从结果可以看出:形参的效果并没有作用到实参中。我们继续看下一段代码:
public class Text {
String s = "b";
public static void main(String[] args) {
Text t = new text();
f(t.s);
 
相关文档:
目录
摘要 ……………………………………………………………………2
文献综述 ……………………&hel ......
java试题
http://202.201.112.11/jpk/apply/teacher/preface/53/test123/test3/exam.htm
1.接口中方法的前面有哪些修饰符
访问权限 返回值类型 是否静态 是否抽象
2.以下哪个为真
Interger a = new Interger(9);
Interger b = new Interger(9);
Long c = New Long(9)
-----
&nbs ......
http://developer.51cto.com/art/201001/180400.htm
文来自CSDN博客,原文标题为《Hibernate 之父:是时候升级到Java EE 6了》。
Hibernate 之父Gavin King建议开发者升级到 Java EE 6 平台,并指出,目前各种不愿意升级的观点其实是没有根据的。
Java EE 6 发布后,我看到了很多反对升级到新平台的观点。这些反对观点大 ......
从5月5号进入就业班到现在四天的时间了,上了这几天课发现就业班的强度真的很大,不像以前基础班的时候那么还比较轻松,已经渐渐感觉到了吃力,因为现在上课需要讲解的知识点太多,有时候下午老师讲到6点多钟才下课,课上的练习时间越来越少了,只能自己利用课后的时间多练习实践,许多东西还都是第一次 ......