请帮忙解答java笔试题的结果为什么是如下那样?

第一题:
Java code
  

  1. publicclassJtest{
  2. intm=1;
  3. inti=3;
  4. voidJtest(){
  5. m=2;
  6. i=4;
  7. }
  8. publicstaticvoidmain(String[]args){
  9. Jtestapp=newJtest();
  10. [color=#FF0000]app.Jtest();[/color]
  11. System.out.println(app.m+","+app.i);
  12. }
  13. }




你没有调用类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

理解了吧?

你可能感兴趣的:(java,C++,c,C#)