当前位置: 技术问答>java相关
SCJP(YY5)
来源: 互联网 发布时间:2015-02-15
本文导语: Given an object created by the following class 1. class Example extends Object { 2. public void Increment (Integer N) { 3. N = new Integer( N.intValue() + 1); 4. } 6. public void Result(int x) { 7. Integer X = new Integer(x); 8. Inc...
Given an object created by the following class
1. class Example extends Object {
2. public void Increment (Integer N) {
3. N = new Integer( N.intValue() + 1);
4. }
6. public void Result(int x) {
7. Integer X = new Integer(x);
8. Increment(X);
9. System.out.println("New value is" + X);
10. }
11. }
What happens when a program calls the Result method with a value of 30?
a. The message "New value is 31" goest to the standard output.
b. The message "New value is 29" goes to the standard output.
c. The message "New Value is 30" goes to the standard output.
d. The program fails to compile.
答案是C。请问为什么?
1. class Example extends Object {
2. public void Increment (Integer N) {
3. N = new Integer( N.intValue() + 1);
4. }
6. public void Result(int x) {
7. Integer X = new Integer(x);
8. Increment(X);
9. System.out.println("New value is" + X);
10. }
11. }
What happens when a program calls the Result method with a value of 30?
a. The message "New value is 31" goest to the standard output.
b. The message "New value is 29" goes to the standard output.
c. The message "New Value is 30" goes to the standard output.
d. The program fails to compile.
答案是C。请问为什么?
|
这是因为对于java来说参数都是传值引用的,
如果public void Increment (Integer N) {
N = new Integer( N.intValue() + 1);
}
在方法中对外部传入的实参(本例中就是X)是不会有影响的,也就是说X的地址不会因为对N的重新赋值而变化,在方法中只能改变对象的内容。
1. class Example extends Object {
int a;
public Example(int x) {
a=x;
}
public String toString() {
return String.valueOf(a);
}
2. public void Increment (Example N) {
3. N.a+=1;
4. }
public void Increment2(Example N) {
N=new Example(N.a+1);
}
6. public void Result(int x) {
7. Example X = new Example(x);
8. Increment(X);
9. System.out.println("New value is" + X);
10. }
11. }
如果x=30,那么调用Increment(X); 的结果就是31,
而Increment2(X); 就是30;
如果public void Increment (Integer N) {
N = new Integer( N.intValue() + 1);
}
在方法中对外部传入的实参(本例中就是X)是不会有影响的,也就是说X的地址不会因为对N的重新赋值而变化,在方法中只能改变对象的内容。
1. class Example extends Object {
int a;
public Example(int x) {
a=x;
}
public String toString() {
return String.valueOf(a);
}
2. public void Increment (Example N) {
3. N.a+=1;
4. }
public void Increment2(Example N) {
N=new Example(N.a+1);
}
6. public void Result(int x) {
7. Example X = new Example(x);
8. Increment(X);
9. System.out.println("New value is" + X);
10. }
11. }
如果x=30,那么调用Increment(X); 的结果就是31,
而Increment2(X); 就是30;
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。