解决方案 »
- 求助JAVA EE 5的开发环境
- 关于jstl转义问题,求教。。。
- 速速来人,求设计,求解决方案!!
- MD5加密 有兴趣的进来
- 项目移动:MyEclipse+Cosminexus+struts+Orcale
- Struts标签<html:file>的问题
- hibernate配置文件中的version是干什么用的
- 关于 日期 格式化的问题?
- 谁能帮我讲解一下j2ee在服务器中的作用是什么
- jBulider里如何编辑应用服务器啊?
- 十万分火急求救 表单添加页面 有一个字段是select 下拉选项 下拉选项的数据是其他表的数据 这个表单数据应该怎么设计和处理呢
- 页面左边是目录,右边是具体内容。点击左边连接之后,左边保持不变,右边内容更换,并且浏览器URL栏地址改变
这也太基础了。
--当参数为t的时候,程序调用show(TestJava t),你传进去的是当前类的一个实例对象,在这个方法里面你重新给这个对象也就是t.x赋值,那么针对改对象t的x值在内存中就有了新的值,所以结果是3最后 你如果重新new一个对象,打印x值,结果仍然是1
希望能帮到你
传t.x调用的是show(int x)这个方法,传进去的参数是x,x是1,虽说已经执行了x=4,但是,类变量那个int x=1并没有变,变的只是show(int x)这个x,因为这个方法是静态的,类还没有new的时候就已经加载了,但你的类变量不是静态的,new之前并没有加载,所以当你new了之后x还是1,就算你后面调用了那个方法,除非你这个方法不是静态的,否则他不会改变类变量x的值,所以还是1,而调用第二个方法你传的是个对象,这个对象已经new了,所以他会改变对象里面的类变量x的值,所以输出就是3了
写错了点,就算类变量是静态的,执行第一个方法也不会改变
t传递的是内存使用权t.x传递的并不是内存地址,x != t.x对吧?
没听明白你说的意思。
x = 4;
}
public static void show(TestJava t) {
t.x = 3;
}
第一个只是值传递,不是参数传递,也就是说传递的是x=4中的这个4,而不是x这个参数,而方法体内的x可以说和外部的x没有任何关系,而且 x = 4这个只是修改局部变量(也就是方法头中定义的变量),并非全局变量x,两则只是定义的名称相同,具有一定的迷惑性。
第二个是对象传递,就是本身参数的传递赋值。
而调用show(t)时修改的是t的成员变量的值
x = 4;
}该x只是方法中的局部,与类中的成员变量x是两码事。该方法的参数名称可以改为任意名称。
但是出这个题目的人绝对煞笔
请问 有在方法内使用和全局变量一样的吗你在类中定义了x
那么你在show方法中可以使用y等,这不是混淆吗?
不要说没有经验的 即使有经验的 也会在如此定义中认识出错,给以后的调试程序非常不便利
所以 出题们的人纯属煞笔
int m_x = 1; public static void main(String[] args) {
TestJava1 t = new TestJava1();
show(t.m_x);//将参数改为t,为何输出结果不同?
System.out.print(t.m_x);//如果将上一行改为show(t),输出结果为何不同?
} public static void show(int p_x) {
System.out.println("show(int p_x):Start");
p_x = 4;
System.out.println("show(int p_x):End");
} public static void show(TestJava1 t) {
System.out.println("show(TestJava1 t):Start");
t.m_x = 3;
System.out.println("show(TestJava1 t):End");
}
}show(int p_x):Start
show(int p_x):End
1
int m_x = 1; public static void main(String[] args) {
TestJava3 t = new TestJava3();
show(t);//将参数改为t,为何输出结果不同?
System.out.print(t.m_x);//如果将上一行改为show(t),输出结果为何不同?
} public static void show(int p_x) {
System.out.println("show(int p_x):Start");
p_x = 4;
System.out.println("show(int p_x):End");
} public static void show(TestJava3 t) {
System.out.println("show(TestJava1 t):Start");
t.m_x = 3;
System.out.println("show(TestJava1 t):End");
}
}show(TestJava1 t):Start
show(TestJava1 t):End
3
方法重载 : 是让类以统一的方式处理不同类型数据的一种手段。【方法名相同,参数类型不同】#25的第6行,show(t.m_x);在调用时,参数类型是基本类型int,所以根据log走的是show(int p_x)
#26的第6行,show(t)在调用时,参数类型是类TestJava3,所以根据log走的是show(TestJava3 t)【补充】
为了便于理解,代码的变量名称进行了微调
类的成员变量,加上了m_代表member
方法的参数,加上了p_代表parameter
由于要同时输出两种结果,以便于比较,把类的名字根据输出结果进行了调整,分别加上了1和3
另外额外加上了一些输出log的处理,以使得回答更有说服力一些