最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java按值傳遞和按址傳遞(面試常見)

 更新時間:2017年02月17日 11:20:17   作者:阿飛-Sunday  
這篇文章主要介紹了Java按值傳遞和按址傳遞(面試常見)知識,在面試筆試題中經常會遇到,今天小編給大家詳細介紹下,需要的朋友可以參考下

先復制一個面試/筆試的題:

當一個對象被當作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞?

答案:

是值傳遞。Java語言的方法調用只支持參數(shù)的值傳遞。當一個對象實例作為一個參數(shù)被傳遞到方法中時,參數(shù)的值就是對該對象的引用。對象的屬性可以在被調用過程中被改變,但對對象引用的改變是不會影響到調用者的。C++和C#中可以通過傳引用或傳輸出參數(shù)來改變傳入的參數(shù)的值。在C#中可以編寫如下所示的代碼,但是在Java中卻做不到。

java中的按值傳遞和按址傳遞(按引用傳遞),要明白這兩個概念,要理解按值和按址。

下面舉個簡單的例子來說明:

比如你去國外旅行,拍了一張?zhí)貏e好的照片,你想分享給你的朋友,那么有兩種方式,第一種是你直接將這個照片發(fā)送給你的朋友,也就是給你朋友這個照片的副本;第二種是假如你將這張及其好的照片上傳到一個QQ(微博)等,你將會得到一個訪問這個照片的地址(Url),此時在將這個url分享給你的朋友。
如上例子,第一種可以認為是按值傳遞,第二種可以認為是按址傳遞(按引用傳遞)。知道了這個概念。在進行下面的簡單分析。

按值傳遞:只有當參數(shù)為基本類型變量的時候,java按這種策略的方式傳遞。

上面的分享照片,你的朋友拿到的照片是你的副本,那么朋友對照片的修改不會影響你的照片,你對照片的修改也不會影響到你給朋友分享的照片。

按址傳遞:只有當參數(shù)為引用類型變量,java按這種策略方式進行傳遞。
上面的Url地址給朋友,那么如果朋友也有修改的權限,朋友對照片進行操作,自己訪問的照片就是朋友操作結果后的結果。

下面通過代碼來解釋這個例子:

package com.dufy.reforvalue;
import java.util.Arrays;
/**
 * java中 按值傳遞和按址傳遞
 * 按值傳遞:基本類型變量-按值傳遞,按值傳遞通過復制獲取參數(shù)的副本
 * 按址傳遞:引用類型變量-按址傳遞,按址傳遞通過傳遞對象的引用地址
 * 
 * @author dufy
 * @creation 2017年2月9日
 */
public class ReferenceOrValue {
 /**
  * 基本類型,按值傳遞
  * 舉例:給朋友分享你的照片,對方接收的是你的照片的一個實際的副本,
  * 你和朋友分別對各自的照片進行操作,不會影響彼此的照片!
  */
 public static void testVal(int photo){
  photo++;//朋友對照片進行修改
  System.out.println("My friend see photo = " + photo);
 }
 /**
  * 引用類型:按址傳遞
  * 舉例:給朋友分享你的照片,分享的是你上傳網上的一個照片的Url(地址),
  * 你和朋友都可以通過這個地址訪問照片,并對照片進行一個操作!
  */
 public static void testRef(Photo photo){
  photo.setPhoto("java Photo,Great!");//朋友對你的照片進行修改
  System.out.println("My friend see photo = " + photo.getPhoto());
 }
 /**
  * 引用類型:按址傳遞
  * 因為數(shù)組是一個引用類型。所以傳遞進去的是它們的引用,故在方法中互換了它們的值,也必然影響到它們原來的值.
  */
 public static void testArrayRef(int[] array){
  for (int i = 0; i < array.length; i++) {
   array[i] = 0;
  }
  System.out.println("testArrayRef array is = "+Arrays.toString(array));
 }
 public static void main(String[] args) {
  //一:按值傳遞
  int photo = 10;//定義要發(fā)送的照片
  testVal(photo);//將照片發(fā)發(fā)送你朋友,朋友得到的是一個副本
  System.out.println("My see photo = " + photo);
  //二:按址傳遞
  Photo p = new Photo();//定義一個照片的對象,我自己拍攝的java photo
  p.setPhoto("java photo");
  testRef(p);//將照片對象(即 Url地址) 發(fā)送你朋友,朋友得打的是一個Url(地址),Url打開才是照片
  System.out.println("My friend see photo = " + p.getPhoto());
  //三:數(shù)組也是對象,數(shù)組在堆內存。引用是在棧。
  int array[] = {1,2,3,4,5};
  testArrayRef(array);
  System.out.println("array is = "+Arrays.toString(array));
 }
 /**
  * 照片類
  */
 static class Photo{
  String photo;
  public String getPhoto() {
   return photo;
  }
  public void setPhoto(String photo) {
   this.photo = photo;
  }
 }
}

輸出的結果如下:

My friend see photo = 11
My see photo = 10
My friend see photo = java Photo,Great!
My friend see photo = java Photo,Great!
testArrayRef array is = [0, 0, 0, 0, 0]
array is = [0, 0, 0, 0, 0]

小插曲:有下下面這一道題:這個method應該怎么寫呢?

public static void main(String[] args) {
  int a = 10;
  int b = 20;
  method(a,b);//需要在method被調用后,僅打印出a=100,b=200,請寫出method(a,b)方法!
  System.out.println("a = " + a);
  System.out.println("b = " + b);
 }

肯定有很多人和我之前一樣,想都沒想就寫出下面的代碼:

private static void method(int a, int b) {
  a*=10;
  b*=10;
 }

但是運行結果后你會發(fā)現(xiàn),沒有打印出理想的結果!

這時候如果你仔細看來了上面的介紹就不難理解為什么會出現(xiàn)這樣的結果了!

給出這道題可能正確的結果:

private static void method(int a, int b) {
  System.out.println("a=100,b=200");
  System.exit(0);
 }

以上所述是小編給大家介紹的Java按值傳遞和按址傳遞(面試常見),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • IDEA如何切換JDK版本

    IDEA如何切換JDK版本

    本文主要介紹了IDEA如何切換JDK版本,JDK版本之間的關系是一個向后兼容的關系,所以我們需要切換JDK的版本號,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Tomcat 多端口 多應用

    Tomcat 多端口 多應用

    當你使用Tomcat作為Web Server的時候,是不是會想過這樣的一個問題:如何利用Tomcat建立兩個Web Server,同時偵聽來自不同端口的請求呢?要實現(xiàn)這一點是很簡單的。以下假設Tomcat安裝在D:/Tomcat5.0目錄下。
    2008-02-02
  • SpringBoot+WebMagic+MyBaties實現(xiàn)爬蟲和數(shù)據(jù)入庫的示例

    SpringBoot+WebMagic+MyBaties實現(xiàn)爬蟲和數(shù)據(jù)入庫的示例

    WebMagic是一個開源爬蟲框架,本項目通過在SpringBoot項目中使用WebMagic去抓取數(shù)據(jù),最后使用MyBatis將數(shù)據(jù)入庫。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java中Arrays的介紹及使用方法示例

    Java中Arrays的介紹及使用方法示例

    這篇文章主要給大家介紹了關于Java中Arrays及使用方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • JS求多個數(shù)組的重復數(shù)據(jù)

    JS求多個數(shù)組的重復數(shù)據(jù)

    這篇文章主要介紹了JS求多個數(shù)組的重復數(shù)據(jù)的辦法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • GitLab在IDEA中回滾主分支問題

    GitLab在IDEA中回滾主分支問題

    這是工作中遇到的問題,記錄下來,也方便自己后面查看操作步驟,也方便各位遇到這個問題,不至于卡太久,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spring Boot自動注入的原理分析

    Spring Boot自動注入的原理分析

    這篇文章主要給大家分析介紹了關于Spring Boot自動注入的原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Spring Boot自具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-10-10
  • java 下執(zhí)行mysql 批量插入的幾種方法及用時

    java 下執(zhí)行mysql 批量插入的幾種方法及用時

    java 下執(zhí)行mysql 批量插入的幾種方法及用時,1000次插入方法的比較。
    2013-04-04
  • java生成json實現(xiàn)隱藏掉關鍵屬性

    java生成json實現(xiàn)隱藏掉關鍵屬性

    這篇文章主要介紹了java生成json實現(xiàn)隱藏掉關鍵屬性,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot使用@Autowired為多實現(xiàn)的接口注入依賴

    SpringBoot使用@Autowired為多實現(xiàn)的接口注入依賴

    這篇文章主要介紹了SpringBoot使用@Autowired為多實現(xiàn)的接口注入依賴,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

偏关县| 吉林省| 峡江县| 烟台市| 古丈县| 新安县| 隆化县| 于都县| 山阳县| 许昌县| 渭源县| 沿河| 通海县| 辽阳县| 霍城县| 云和县| 南涧| 临泽县| 南溪县| 武强县| 广西| 黑水县| 晋州市| 浏阳市| 瓦房店市| 南安市| 四子王旗| 翁源县| 仪陇县| 荣成市| 宜春市| 陈巴尔虎旗| 临夏市| 田林县| 南充市| 长宁区| 弥渡县| 苏尼特右旗| 朝阳县| 兰坪| 称多县|