关于java的代码段:voidb
这一段代码是演示代码,没有什么意思,主要是演示变量的作用域的问题
bar方法中生成f变量,这是局部的,它的作用域只在bar方法中,生命周期是整个bar方法的运行时间,也就是说:在bar运行时,在整个bar方法中可以时用f变量,除此之外不能使用
doStuff方法有一个g参数,也是局部的,它的生命周期和f一样,也是doStuff函数中
但是由于java中对类实例的传递都是引用方式,因此:在进入doStuff方法时,g变量引用了f变量的值,因此g。 setName("Boo");将修改在bar中定义的f变量的引用值,因此f变量的name属性会被修改为:Boo;
g = new Foo();修...全部
这一段代码是演示代码,没有什么意思,主要是演示变量的作用域的问题
bar方法中生成f变量,这是局部的,它的作用域只在bar方法中,生命周期是整个bar方法的运行时间,也就是说:在bar运行时,在整个bar方法中可以时用f变量,除此之外不能使用
doStuff方法有一个g参数,也是局部的,它的生命周期和f一样,也是doStuff函数中
但是由于java中对类实例的传递都是引用方式,因此:在进入doStuff方法时,g变量引用了f变量的值,因此g。
setName("Boo");将修改在bar中定义的f变量的引用值,因此f变量的name属性会被修改为:Boo;
g = new Foo();修改了g的引用实例,但是它的作用域时doStuff方法,因此对变量f的引用没有影响
我建议你在
bar的语句doStuff(f);前后增加打印f的name属性语句,看看它的变化;
在g。
setName("Boo");前后增加打印f的name属性语句,看看它的变化;
在g = new Foo();前后增加打印f的name属性语句,看看它的变化;
你就明白了。收起