關於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三人。 //已抽籤決定比賽名單。有人向