当前位置: 技术问答>java相关
请教高手!!,菜鸟免进!!!
来源: 互联网 发布时间:2015-02-06
本文导语: class ValHold{ public int i = 10; } public class ObParm{ public static void main(String argv[]){ ObParm o = new ObParm(); o.amethod(); } public void amethod(){ ...
class ValHold{
public int i = 10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.println(v.i);
}
public void another(ValHold v, int i){
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.println(v.i+ " "+i);
}
}
请教高手,帮我分析这段代码?我对这段代码很模糊!!
public int i = 10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.println(v.i);
}
public void another(ValHold v, int i){
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.println(v.i+ " "+i);
}
}
请教高手,帮我分析这段代码?我对这段代码很模糊!!
|
class ValHold
{
public int i = 10;
}
public class ObParm
{
public static void main(String argv[])
{
ObParm o = new ObParm();
o.amethod();
}
public void amethod()
{
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);//another函数返回后v.i=20(被vh改变了), 这里的局部变量的i是99
System.out.println(v.i);
}
public void another(ValHold v, int i)
{
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh; //v.i=vh.i=10,
System.out.println(v.i+ " "+i); //v.i=10, i是局部变量0
}
}
提醒:局部变量的值是优先于全局变量和类成员变量
如:
class A
{
private int i;
public A(int i)
{ i++;//这里的i是局部变量
this.i = i;//这里的i也是局部变量,即从参数传过来的,类A的i要通过特定对象来指出。
}
}
{
public int i = 10;
}
public class ObParm
{
public static void main(String argv[])
{
ObParm o = new ObParm();
o.amethod();
}
public void amethod()
{
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);//another函数返回后v.i=20(被vh改变了), 这里的局部变量的i是99
System.out.println(v.i);
}
public void another(ValHold v, int i)
{
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh; //v.i=vh.i=10,
System.out.println(v.i+ " "+i); //v.i=10, i是局部变量0
}
}
提醒:局部变量的值是优先于全局变量和类成员变量
如:
class A
{
private int i;
public A(int i)
{ i++;//这里的i是局部变量
this.i = i;//这里的i也是局部变量,即从参数传过来的,类A的i要通过特定对象来指出。
}
}
|
注意一下变量的作用范围就可以了!
应该输出如下:
10 0
20
应该输出如下:
10 0
20
|
小可是一菜鸟。
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i); //输出10 0
System.out.println(v.i); //输出20
}
public void another(ValHold v, int i){
i=0;
v.i = 20; //v.i改为20,此时another外的v.i也为20
ValHold vh = new ValHold();
v = vh; //method another中的v.i为10
System.out.println(v.i+ " "+i); //输出10 0
}
}
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i); //输出10 0
System.out.println(v.i); //输出20
}
public void another(ValHold v, int i){
i=0;
v.i = 20; //v.i改为20,此时another外的v.i也为20
ValHold vh = new ValHold();
v = vh; //method another中的v.i为10
System.out.println(v.i+ " "+i); //输出10 0
}
}
|
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i); //输出10 0
System.out.println(v.i); //输出20
}
public void another(ValHold v, int i){
i=0;
v.i = 20; //v.i改为20,此时another外的v.i也为20
ValHold vh = new ValHold();
v = vh; //method another中的v.i为10
System.out.println(v.i+ " "+i); //输出10 0
}
/*object vh out of scope*/
}
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i); //输出10 0
System.out.println(v.i); //输出20
}
public void another(ValHold v, int i){
i=0;
v.i = 20; //v.i改为20,此时another外的v.i也为20
ValHold vh = new ValHold();
v = vh; //method another中的v.i为10
System.out.println(v.i+ " "+i); //输出10 0
}
/*object vh out of scope*/
}
|
呵呵,一道scjp的题
10 0
20
10 0
20
|
结果是
10 0
20
原因是java语言在将对象作为参数传入时,仅是在内存中复制了一个变量指向这个对象,然后将这个复制了的对象传入;所以在方法内对此传入对象属性的修改实际上是对原对象的修改;但是,在方法内对此传入对象的重定向并不能改变该对象的指向!
E-农民说说俺说的对不对?
10 0
20
原因是java语言在将对象作为参数传入时,仅是在内存中复制了一个变量指向这个对象,然后将这个复制了的对象传入;所以在方法内对此传入对象属性的修改实际上是对原对象的修改;但是,在方法内对此传入对象的重定向并不能改变该对象的指向!
E-农民说说俺说的对不对?
|
dcb123() 所言极是!