当前位置:编程学习 > JAVA >>

一家公司的几道笔试题

[java] 
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();  
System.out.println(app.m+","+app.i);  
}  
}  
 
写出输出.
结果是1,3;
因为在这里void Jtest();并没有并调用,它只是一个
方法,而非构造方法,这样的编写是有警告的,不过
可以运行.
[java] 
public class Jtest{  
int m=1;  
int i=3;  
Jtest(){  
m=2;  
i=4;  
}  
public static void main(String[] args){  
Jtest app=new Jtest();  
System.out.println(app.m+","+app.i);  
}  
}  
写出输出:结果是2,4;调用了构造方法,不加修饰符,默认访问权限是package access,在Java里没有关键字表示,就是包内的能访问,包外就不行了(即使导入也不行).
[java] 
public class Test  
{  
    static void oper(int b)  
    {  
        b = b + 100;  
    }  
      
    public static void main(String[] args)  
    {  
        int a = 99;  
        oper(a);  
        System.out.println(a);  
    }  
  
}  
输出为99.
我们来分析一下内存:
int a = 99;
首先在栈里面开辟一块空间保存a
比如:a:xxxx
然后调用oper(a);
这时把a 的值99赋给int b;
b在内存里也开辟了自己的空间,此时
值也是99.
然后执行oper(a);方法体,b = b + 100;
此时b的值为199,a的值为99.
[java] 
public class Test {  
  public static void main(String[] args) {  
        String a=new String("A");  
        String b=new String("B");  
        oper(a,b);  
        System.out.print(a+","+b);  
    }  
  static void oper(String c,String d){  
      c.concat("B");  
      d=c;  
  }  
}  
此程序输出:A和B.
原因就是String是final类型的.并不会被改变.
[java] 
public class Test  
{  
    public static void main(String[] args)  
    {  
        String a = new String("A");  
        String b = new String("B");  
        a.concat("aa");  
        System.out.println(a + "," + b);  
    }  
  
}  
这个还是会输出A,B
原因同上.
[java]  
package intervie;  
  
public class Test  
{  
    public static void main(String[] args)  
    {  
        String a = new String("A");  
        String b = new String("B");  
        a = a.concat("aa");  
        System.out.println(a + "," + b);  
    }  
  
}  
 
做了下改动,再来看看.结果就不同了.
输出的是Aaa,B
因为String 是final类型的.所以执行到
a = c.concat("aa");
会在heap里新创建一个对象,而a指向它.
这是一新的地址,同String a 这个已经不同了.
所以输出的是后一个.即改变后的值.
[java]  
public class Test  
{  
    static void oper(StringBuffer c,StringBuffer d)  
    {  
        d = c.append("B");  
    }  
      
    public static void main(String[] args)  
    {  
        StringBuffer a = new StringBuffer("A");  
        StringBuffer b = new StringBuffer("B");  
        oper(a, b);  
        System.out.println(a + "," + b);  
    }  
  
}  
 
此程序会输出:AB,B
 
 
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,