几道不错的面试题目,遇到一个写一个吧。

1、先来一个关于值传递和引用传递的例题吧。

 

public class MyClass { 
    static void aMethod(StringBuffer sf1, StringBuffer sf2) { 
        sf1.append(sf2); 
        sf2 = sf1; 
    } 

    public static void main(String[] args){ 
        StringBuffer sf1 = new StringBuffer("A"); 
        StringBuffer sf2 = new StringBuffer("B"); 
        aMethod(sf1,sf2); 
        System.out .println(sf1+ ":"+sf2); 
    } 
} 
  

 

不了解这块的可以自己先做一下在去看答案。


解答:AB:B 

聊一下这个值传递和应用传递吧。

值传递:也就是说形参类型是基本数据类型。这些在传递的过程中传递的是那个变量的值。比如

addNum(int a){

  a++;

}

如果在main函数中定义一个变量 

main(){

  int a = 0;

  addNum(a);

  sysout(a);

}输出结果会是1.

引用传递:无非说的就是形参的数据类型是引用型。其实传递的是变量对应的内存地址。

上述编程题目中使用的是stringBuffer就是引用传递。将是sf1和sf2传到aMethod中。在函数中sf1.append(sf2).其实内存地址中的数据已经改变了。而sf2 = sf1,只是将sf2指向了sf1指向的地址。然后函数结束,回到main中。

这里要注意的是形参中的sf1和sf2与main中的sf1与sf2不是一个,这里是一个陷阱。如果不想被迷惑可以改变一下那个函数的写法,会更加清晰。

 

static void aMethod(StringBuffer para1, StringBuffer para2) { 
        para1.append(para2); 
        para2= para1; 
} 

 

这个时候回到main中sf1指向的地址是变化后的也就是ab

sf2指向的地址仍然是b。无变化。

 

2、写一程序将”张三”, “李四”, “王五” 按汉字拼音首字母排序

public class InterviewThree {
    public static void main(String[] args) {
        String [] strs = {"张三","李四","王五"};
        
        Comparator c = Collator.getInstance(Locale.CHINA);
        
        //升序
        Arrays.sort(strs,c);
        
        for(int i=0;i<strs.length;i++){
            System.out.println(strs[i]);
        }
    }
}

 

posted @ 2016-02-02 12:46  小祥工作室  阅读(730)  评论(0编辑  收藏  举报