1. 程式人生 > >關於Java 呼叫函式進行兩個變數值的交換

關於Java 呼叫函式進行兩個變數值的交換

交換兩個變數的值,如果是基礎型別比如int, 直接進行交換:

int aToSwap = 1; int bToSwap = 2;

一個經典的問題就是如果我有一個swap 方法如下,試問在主函式裡呼叫了這個swap 方法以後 ,從主函式裡傳入的兩個變數值交換了沒有?

public void swap(int a, int b){

int temp = a;

a=b;

b=temp

}

答案是沒有,我們知道C++裡面有指標的概念,而java沒有這個概念,那麼如何理解這裡的交換呢:

1. 主函式執行時,jvm會在堆記憶體建立兩個int 型的值1和2  

2. 然後在棧記憶體建立兩個變數名 aToSwap   和 bToSwap   指向堆記憶體的1 和 2

3. 呼叫swap 的時候,會在棧記憶體建立兩個臨時變數a、b 分別指向堆記憶體的1和2,

4. swap 函式執行,臨時變數a、b的值發生了交換

5, swap函式呼叫完畢,從棧中釋放a、b

6.主函式顯示aToSwap 、bToSwap 值並沒有交換。

那如果用swap 函式交換的是兩個物件呢?

其實答案是一樣的,因為swap 呼叫的時候, 都會建立臨時變數,swap函式呼叫完後,臨時變數都會被交換然後釋放,真正要交換的兩個變數並沒有被交換。

這個問題主要就涉及的就是函式呼叫,已經變數在堆疊中的建立。

相關推薦

關於Java 呼叫函式進行數值交換

交換兩個變數的值,如果是基礎型別比如int, 直接進行交換: int aToSwap = 1; int bToSwap = 2; 一個經典的問題就是如果我有一個swap 方法如下,試問在主函式裡呼叫了這個swap 方法以後 ,從主函式裡傳入的兩個變數值交換了沒有? publ

關於交換數值的三種方法

1,臨時變數法: temp=A; A=B; B=temp; 2,求差法: A=A-B; B=A+B; //B=A-B+B=A A=B-A; //A=A-A+B 3,異或法: A=A^B; B=A^B; //B=A^B^B=A A=A^B; //A=A^B^A=B 第一種方法最

原地交換數值

原地交換兩個變數值 原地交換兩個變數值 原地交換兩個變數值 如何將a、b兩個變數的值進行交換 可以通過相加來實現: int a=3,b=4; a=a+b; b=a-b; a=a=b; 另外,可以用異或來實現:

PHP不用第三變數互換數值的方法

在PHP中如何在不使用第三變數的情況下,達到交換兩個變數值得目的。 一、substr() && strlen() 程式碼: <?php /** * 雙方變數為字串時,可用交換方法一 * 使用substr()結合strlen()兩個方法達

PHP互換數值的方法(不用第三變數)

一、substr() && strlen()<?php /** * 雙方變數為字串時,可用交換方法一 * 使用substr()結合strlen()兩個方法達到交換變數值得目的 */ $a = "This is A"; // a變數原始值 $b =

JavaScript不借助第三變數交換a,b數值

交換變數值方案一 最最最簡單的辦法就是使用一個臨時變量了 不過使用臨時變數的方法實在是太low了 var t; t = a; a = b; b = t; 首先把a的值儲存到臨時變數中 然後b賦值給a 最後拿出臨時變數中的a值賦給b 這個辦法是最

【C語言】數值交換——指標

     C語言中交換兩個變數的值可以在主函式中直接實現,也可以通過子函式來實現。下面我們介紹用子函式實現的情況。    1.將兩個變數的值作為實參直接傳遞,在子函式內部定義一個普通變數來對兩個形參進行交換,並分別在子函式和主函式中列印。#include <stdio.

面試官在“逗”你係列:不借助第三變數交換數值的方案你有幾種?

引言 在我們學習程式設計之初,就學習過變數的賦值操作,同時也學習了將一個變數的值賦值給另外一個變數。對於交換兩個變數的值,很多童鞋都有解決方案。然鵝,對於面試官提出的不借助第三變數來交換兩個變數的值,你能想到幾種解決方案呢? 如果你只知道一種方案,請你認真看下去... 如果你知道兩種方案,那麼你可以來了解更

量,不用第三個數就進行切換數值

進行 變量 方法 class span 個數 style blog body var a = 5; var b = 6; //第一種方法: a = a+b; b = a - b; a = a - b; //第二種方法: a = [a,b]; b

JavaSE7基礎 交換量的數值 巧妙的代碼

學習 程序 技術分享 註意 我會 思考 ase com 編輯器 jdk版本 :jdk-7u72-windows-i586系統 :Windows7編輯器 :Notepad++ v7.4.2註意事項 :博文內容僅供參考,不可用於其他用途。 代碼 clas

不借助第三交換數值類型量的值

blog 數值 csdn 交換 tails 其中 簡單的 簡單 div 原文地址:http://blog.csdn.net/web_hwg/article/details/75045689 方法一 最簡單的方法是用一個臨時變量 var a = 10, b = 20; va

Java不借助第三方交換量的值

style system int ava pan 運算符 ring out java 這種方式有個隱患,如果兩個數相加超過了類型的上限,會影響精度,導致結果不準確; public class Test { public static void main(Stri

采用位異或方式將數值調換

clas 兩個 rgs package 異或 dem int span [] 1 package debug; 2 3 class Demo2 { 4 public static void main(String[] args){ 5

JAVA語法——實現量互換

print 語法 public sca int rgs str [] nbsp 具體細節見:https://blog.csdn.net/wwt18811707971/article/details/78291490 package 實現兩個變量的互換; impor

C語言中函式呼叫怎麼返回

在C語言中,函式只能返回一個值,要返回兩個值,可以改換思路,通過其它方式做到。 1 建立陣列,返回指標。 在要返回的兩個值型別相同時,可以用建立陣列的方式,將要返回的值存在陣列中,並返回陣列首地址,這樣就可以實現返回兩個值的效果。 需要注意的是,要返回陣列首地址,那麼返回

RabbitMQ的學習(六):Spring整合RabbitMQ並進行不同的系統間的呼叫

上一篇文章已經講解了spring整合RabbitMQ的例子,目前所有的例子都是簡單明瞭,程式設計師需要有舉一反三的能力,所以若覺得例子太簡單,請手下留情。。 這篇文章將弄兩個系統,然後進行系統間的通訊,通過該例子,希望你能對分散式,叢集間的通訊有所瞭解。 新建一個能啟動的web專

編寫求整數最大公約數的函式,並呼叫函式整數的最大公約數? 呼叫函式

#include <stdio.h> int GCD(int a,int b); int main() {     int num1 = 0 ,num2 = 0;     int result ;     printf("輸入兩個整數:\n");     sc

matlab全域性變數(global):夠被其他函式呼叫.在這函式中都要用global修飾這個變數.

1.靜態變數(persistent):只有這個function才能認識它(main函式也不行).供該函式下一次呼叫.persistent保持。 在函式中宣告的變數,當函式呼叫完之後就會釋放。如果想保留這個變數的值(供該函式下一次呼叫),可以把這個變數宣告為靜態變數。靜態

Java中異或運算實現整數的交換以及其功能函式實現

       今天學習到一種超酷炫的交換兩個整數的方法,給各位分享一下。異或運算屬於位運算的一種,首先簡單介紹一下異或預算的語法規則。 假設a與b為不相等的兩個整數。 (1)a^a=0; (2)a^b

java經典演算法_017乒乓球隊進行比賽,找出比賽對手名單。

package wzs.arithmetics; import java.util.ArrayList; import java.util.List; //題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。 //已抽籤決定比賽名單。有人向