java 方法呼叫,形參改變,實參是否發生改變
今天遇見一個面試題,java基礎的東西。我竟然給忘了。。。寫下來加深一下印象
面試題:
public class Test2 { public static void main(String[] args) { String a = new String("abc"); int b = 5; int[] c={1,2,3,4}; changeInt(a,b,c); System.out.println(a +"-"+ b +"-"+ Arrays.toString(c)); } public static void changeInt(String a,int b,int[] c) { a = "123456"; b = 10; c[0] = 5; } }
請輸出正確結果:
執行結果:
abc-5-[5, 2, 3, 4]
結論是這樣:
實參:如果是基本型別或者String,則實參不會變(傳的是值);
如果是物件集合或者陣列,則實參會改變(傳的是引用)。
謹記下次不會忘記!!!
相關推薦
java 方法呼叫,形參改變,實參是否發生改變
今天遇見一個面試題,java基礎的東西。我竟然給忘了。。。寫下來加深一下印象面試題:public class Test2 { public static void main(String[] args) { String a = new String(
已定義的函式有返回值,函式呼叫可以作為一個函式的實參,但是不能作為形參
1、問題描述 若已定義的函式有返回值,則以下關於該函式呼叫的敘述中錯誤的是( D ) A)函式呼叫可以作為獨立的語句存在 B)函式呼叫可以作為一個函式的實參 C)函式呼叫可以出現在表示式中
JAVA 方法區與堆--java7前,java7,java8各不相同
三種情況: java7之前,方法區位於永久代(PermGen),永久代和堆相互隔離,永久代的大小在啟動JVM時可以設定一個固定值,不可變; java7中,儲存在永久代的部分資料就已經轉移到Java Heap或者Native memory。但永久代仍存在於JDK 1.7中,並沒有完全移
java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字(已解決)
在java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字 //java程式碼 @Test public void testProcedure(){
Java方法中 訪問url 下載連結,下載檔案
/** * * @param urlStr * @param fileName * @param savePath * @throws IOException */ public s
Struts2服務在開啟動態方法呼叫(DMI)的情況下,導致的安全問題,一則新聞
2016-04-27 02:40:18 一則新聞 Apache官方今天晚上釋出安全公告(官方編號S2-032/CVE編號CVE-2016-3081),Apache Struts2服務在開啟動態方法呼叫(DMI)的情況下,可以被遠端執行任意命令,安全威脅程度高。 這一
java方法呼叫流程
1.編譯器檢視物件的型別和方法名 例如,我們有一個類: public class Father { public void fun1(int a) { System.out.println("這是Father的fun1(int a)方法"); } public void
Objective-C與Java 方法呼叫比較
Objective-C:宣告方法:-(Return-type)method:(Parameter-type)parameter1{...};多個引數時:-(Return-type)methodPart1:(Parameter-type)parameter1 methodPart2:(Parameter-typ
Java方法呼叫注意點
public class MethodDemo{ public static void main(String[] args){ //傳遞形式1 int a = 1; int b = 2; change(a,b); System.out.println
android之JNI引數傳遞 (Java方法呼叫)
從Java 1.1開始,Java Native Interface (JNI)標準成為java平臺的一部分,它允許Java程式碼和其他語言寫的程式碼進行互動。JNI一開始是為了本地已編譯語言,尤其是C和C++而設計 的,但是它並不妨礙你使用其他語言,只要呼叫約定受支援就可
關於java方法呼叫時產生的StackFrame內部內容。
引自《深入Java虛擬機器》: 棧幀由三部分組成:區域性變數區、運算元棧和棧資料區。區域性變數區和運算元棧要視對應的方法而定,他們是按字長計算的。編譯器在編譯時就確定了這些值並放在class檔案中,而棧資料區的大小依賴於具體實現。 當虛擬機器呼叫一個java方法
Java方法呼叫的位元組碼指令學習
Java1.8環境下,我們在編寫程式時會進行各種方法呼叫,虛擬機器在執行這些呼叫的時候會用到不同的位元組碼指令,共有如下五種:
難住了同事:Java 方法呼叫到底是傳值還是傳引用
> **Java 方法呼叫中的引數是值傳遞還是引用傳遞呢?**相信每個做開發的同學都碰到過傳這個問題,不光是做 Java 的同學,用 C#、Python 開發的同學同樣肯定遇到過這個問題,而且很有可能不止一次。 > > 那麼,Java 中到底是值傳遞還是引用傳遞呢,**答案是值傳遞,Java 中沒有引用傳遞這
C++ char* 的若干問題之二:char*作為形參能否影響實參的值
有如下方法: int readFeat(char* param) { param = (char *) malloc(10 * sizeof(char)); param = "test char"; param = '\0'; return 0; } 在該方法中,
討論java中呼叫函式,形參的傳遞是值傳遞還是引用傳遞的問題
首先說結論: 當引數是引用資料型別時,傳入形參的是實參的引用;(證一) 當引數是基本資料型別時,傳入形參的是實參值;(證二) 證明如下: (證一) public class PassByReferenceOrValueTest { public static void main(String
java中值傳遞的三種情況,形參的改變不影響實參
public static void main(String[] args) {//第一種基本資料型別int a= 1;int b= 2;System.out.println("a:"+a+"---"+"b:"+b);change(a,b);System.out.printl
JAVA方法中陣列作為形參,傳的是引用
之前一直以為傳陣列和基本型別都是傳的值,今天做題時發現傳陣列傳的其實是引用。 public class Tests { public static void main(String[]
[BIT0429]-Java 介面作方法形參,執行時傳遞實現介面方法類物件作實參
1.定義介面表示某個行為(如:吃飯) 2.定義多個實現該介面的類 3.定義一個方法,以該介面作為形參,執行時以實現該介面的任意類的物件作為實參 4.達到精簡程式碼的目的,並且可複用性好,可維護性高
【java】java反射機制,動態獲取對象的屬性和對應的參數值,並屬性按照字典序排序,Field.setAccessible()方法的說明【可用於微信支付 簽名生成】
modifier 直接 this 字段值 1-1 讓我 toupper ima play 方法1:通過get()方法獲取屬性值 package com.sxd.test.controller; public class FirstCa{ private
java通過讀取本地文件獲取反射方法參數,執行對象方法
invoke 文本 [] run pac 執行 read prop col 運用到的知識點 IO流, 集合properties 反射 在工程目錄下新建file config.properties #one time only can run one met