public class NameClass {
private static int x ;
public static void main(String[] args) {
name(x);
System.out.println(x);
}
public static void name(int x){
x ++;
}
}
//请帮忙分析下为什么这断代码的输出为0?
package cn.com.test2;
public class A {
public static void testMethod(String name){
System.out.println("hello"+name);
}
public static void main(String[] args) {
testMethod("nick");
//?
((A)null).testMethod("tom");//这句话是什么意思呢?求详细解答
}
}
第一个程序;name函数操作的x的作用域只在name函数内,与外层的静态变量x无关。这个静态变量在类加载时就初始化为0了。
第二个程序:先将null类 强制类型转换为A类型,然后通过这个A类型来调用静态方法testMethod。如果你用普通的方法就不能实现。
在java中,对null进行强制类型转换不会报错,结果还是null。第二个程序也可以写成下面这样:
A obj= null;
obj.testMethod("Gook");
第一个程序,你x++修改的是参数的x,而不是静态变量的x
第二个程序,强制类型转换,然后调用静态方法,输出hellotom
第二个程序在线验证:http://ideone.com/Ok7AJe
第一个程序:你需要注意的是Java中都是值传递(没有指针这一说),所以函数里的x和外部的x是不一样的,只是两个同名的不同的基本数据类型对象
第二个程序:这个讲解很详细,http://blog.csdn.net/havedream_one/article/details/49200071
感谢各位的回答,帮我解决了这个问题.感谢!