面試總結

1, 值傳遞和引用傳遞

在java中是傳遞的引用,在傳遞參數到方法的時候,都會拷貝一個引用的副本,在方法內部,如果在方法內部改變是副本的內存指向, 那原來的變量是不會發生改變的,如果改變的是指向地址的值,那原對象就會發生改變。

public class StringTest {

 public static void main(String[] args) {
  String str = "java";
  nochange(str, str);
  change(str, str);
 }
 
 public static void nochange(String str1,String str2) {
  System.out.println("nochange--->>"+(str1 == str2));
 }
 

 public static void change(String str1,String str2) {
  str1 = str1 + "";
  System.out.println("change--->>"+(str1 == str2));
 }
}


結果:

nochange--->>true
change--->>false



網上引用:

很多人說,java中的String雖然是對象,但是具有值類型的特徵。他是值傳遞,傳遞的值。
我認爲這這種說法完全是錯誤的。
String和普通對象毫無區別,和其他對象一樣,傳遞的是引用,而不是值。
一段String的運用代碼:

 String a = "123";
public void change(String a){
    a = "234";
}

很多人會說,a的值沒有變,是因爲String是值傳遞,問題是,就算對於一個普通對象,這樣的用法,該對象的值也是不會改變的!這是一個大大的誤區。java中根本沒有真正的引用傳遞,不想C#中有ref關鍵字!
比如:

 Person p = new Person("張三");
public void change(Person p){
    p = new Person("李四");
}

上面對於String的使用和這個自定義Person類的使用上,根本沒有本質上的區別。同樣,外面的p變量依然是”張三”,不會是“李四。”

同樣的代碼,放入C#中,加上ref關鍵字:

 Person p = new Person("張三");
public void Change(ref Person p){
    p = new Person("李四");
}

結果是,p變爲了“張三”!

所以說,個人認爲java中的String並沒有什麼特殊性,和其他類一樣,同樣保存的對象的引用,傳遞的引用。唯一的特殊性,就是可以直接用“”雙引號的方式創建字符串對象。



2, android中多線程,  多進程之間的通信?






發佈了29 篇原創文章 · 獲贊 7 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章