第一题:
你没有调用类Jtest中的Jtest方法,自然m和i的值不会变化,想让m=2,i=4就加上红色那句
第二题:
第三题:
第四题:
第五题:
-
Java code
-
- public class Jtest{
- int m=1;
- int i=3;
- void Jtest(){
- m=2;
- i=4;
- }
- public static void main(String[] args){
- Jtest app=new Jtest();
- [color=#FF0000]app.Jtest();[/color]
- System.out.println(app.m+","+app.i);
- }
- }
你没有调用类Jtest中的Jtest方法,自然m和i的值不会变化,想让m=2,i=4就加上红色那句
第二题:
-
Java code
-
public class Jtest{
int m = 1 ;
int i = 3 ;
Jtest(){ // 去掉了第一题中的void,你这个Jtest()现在由普通方法变为构造函数了
m = 2 ;
i = 4 ;
}
public static void main(String[] args){
Jtest app = new Jtest(); // 生成一个类的对象会自动调用该类的构造函数,此时改变m和i的值
System.out.println(app.m + " , " + app.i);
}
}
第三题:
-
Java code
-
public class Test {
public static void main(String[] args) {
int a = 99 ;
oper(a); // 值传递,传递的是a的副本,改变的也是a的副本,a本身不变
System.out.print(a);
}
static void oper( int b){
b = b + 100 ;
}
}
第四题:
-
Java code
-
public class Test {
public static void main(String[] args) {
String a = new String( " A " );
String b = new String( " B " );
oper(a,b); // 此处虽然是引用传递,但是java规定String的内容不能改变
System.out.print(a + " , " + b);
}
static void oper(String c,String d){
c.concat( " B " );
d = c;
}
}
第五题:
-
Java code
-
public class Test {
public static void main(String[] args) {
StringBuffer a = new StringBuffer ( " A " );
StringBuffer b = new StringBuffer ( " B " );
oper(a,b); // 传递引用,StringBuffer为可变字符串
System.out.print(a + " , " + b);
}
static void oper(StringBuffer c,StringBuffer d){
c.append( " B " );
d = c; // 引用的指向变化不影响实参的变化
}
}
关于最后一题,为了便于理解,可以再加一句:
-
Java code
-
public class Test {
public static void main(String[] args) {
StringBuffer a = new StringBuffer ( " A " );
StringBuffer b = new StringBuffer ( " B " );
oper(a,b);
System.out.print(a + " , " + b);
}
static void oper(StringBuffer c,StringBuffer d){
c.append( " B " );
d = c; // d指向c指向的值即a
d.append( " C " ); // 这是在改变a的值了
}
}
输出:ABC,B
理解了吧? -