欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java值傳遞之swap()方法不能交換的解決

 更新時(shí)間:2020年09月28日 14:14:39   作者:秦彬桂  
這篇文章主要介紹了Java值傳遞之swap()方法不能交換的解決,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

自己寫了一個(gè)Swap測試類,代碼如下:

swap不能交換原生數(shù)據(jù)類型以及字符串類型。

public class Swap5
{
 public static void main(String[] args)
 {
 // String x = "x111";
 // String y = "y111";
  String x = new String("x111");
  String y = new String("y111");
  swap(x, y);
  System.out.println(x);
  System.out.println(y);
 }

 public static void swap(String a, String b)
 {
  String temp = a;
  a = b;
  b = temp;
 }
}

運(yùn)行結(jié)果:java Swap5

x111

y111

疑惑:注釋部分不能交換可以理解為x和y生成在字符串池中,但是String x = new String(“x111”);應(yīng)該是生成在堆中,是引用對象,但為什么交換不了?

public class Swap
{
 public static void main(String[] args)
 {
  int c = 3;
  int d = 5;
  swap(c, d);
  System.out.println("c: " + c + " d: " + d);

 }

 public static void swap(int a, int b)
 {
  int temp = a;
  a = b;
  b = temp;
 }
}

運(yùn)行結(jié)果:

java Swap

c: 3 d: 5

為什么調(diào)用swap()方法后并沒有交換c、d的值呢,因?yàn)閖ava只有值傳遞(沒有引用傳遞),所以其實(shí)調(diào)用swap()時(shí)是把值賦給a、b,賦完后與c、d就沒什么關(guān)系,c、d還是原來的值。其實(shí)就是值傳遞。不理解的話回去看看值傳遞。

但是這樣用數(shù)組改寫后便可實(shí)現(xiàn)交換功能了:

public class Swap5
{
 public static void main(String[] args)
 {
  int[] i = {3, 5};

  swap(i);
  System.out.println(i[0]);
  System.out.println(i[1]);
 }

 public static void swap(int[] a)
 {
  int temp = a[0];
  a[0] = a[1];
  a[1] = temp;
 }
}

運(yùn)行結(jié)果:

5

3

總結(jié):

引用類型才可以交換。因?yàn)樵鷶?shù)據(jù)類型是直接賦值,而引用類型直接賦的是地址,地址指向的是同一個(gè)對象,所以能改變。

補(bǔ)充知識:Java參數(shù)值傳遞 swap(a,b)--如何交換a、b的值

首先明白Java的數(shù)據(jù)類型分為兩種:基本數(shù)據(jù)類型 和 引用數(shù)據(jù)類型

java中的參數(shù)傳遞機(jī)制:值傳遞

形參是基本數(shù)據(jù)類型的,將實(shí)參的值傳遞給形參的基本數(shù)據(jù)類型的變量

形參是引用數(shù)據(jù)類型的,將實(shí)參的引用類型變量的值(對象的首地址)傳遞給形參

二者的概念:

1)基本類型:簡單數(shù)據(jù)類型是不能簡化的、內(nèi)置的數(shù)據(jù)類型、由編程語言本身定義,它表示了真實(shí)的數(shù)字、字符和整數(shù)。

2)引用數(shù)據(jù)類型:Java語言本身不支持C++中的結(jié)構(gòu)(struct)或聯(lián)合(union)數(shù)據(jù)類型,它的復(fù)合數(shù)據(jù)類型一般都是通過類或接口進(jìn)行構(gòu)造,類提供了捆綁數(shù)據(jù)和方法的方式,同時(shí)可以針對程序外部進(jìn)行信息隱藏。

Java數(shù)據(jù)類型在內(nèi)存中的存儲:

1)基本數(shù)據(jù)類型的存儲原理:所有的簡單數(shù)據(jù)類型不存在“引用”的概念,基本數(shù)據(jù)類型都是直接存儲在內(nèi)存中的內(nèi)存棧上的,數(shù)據(jù)本身的值就是存儲在??臻g里面,而Java語言里面八種數(shù)據(jù)類型是這種存儲模型;

2)引用類型的存儲原理:引用類型繼承于Object類(也是引用類型)都是按照J(rèn)ava里面存儲對象的內(nèi)存模型來進(jìn)行數(shù)據(jù)存儲的,使用Java內(nèi)存堆和內(nèi)存棧來進(jìn)行這種類型的數(shù)據(jù)存儲,簡單地講,“引用”是存儲在有序的內(nèi)存棧上的,而對象本身的值存儲在內(nèi)存堆上的;

區(qū)別:基本數(shù)據(jù)類型和引用類型的區(qū)別主要在于基本數(shù)據(jù)類型是分配在棧上的,而引用類型是分配在堆上的(需要java中的棧、堆概念),

那么如何交換兩個(gè)數(shù)值呢?

那么可以傳遞引用類型的數(shù)據(jù),如對象或者數(shù)組,下面是傳遞的數(shù)組:

public class Swap5
{
  public static void main(String[] args)
  {
    int[] i = {3, 5};
 
    swap(i);
    System.out.println(i[0]);
    System.out.println(i[1]);
  }
 
  public static void swap(int[] a)
  {
    int temp = a[0];
    a[0] = a[1];
    a[1] = temp;
  }
}

以上這篇Java值傳遞之swap()方法不能交換的解決就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Cloud Gateway 如何修改HTTP響應(yīng)信息

    Spring Cloud Gateway 如何修改HTTP響應(yīng)信息

    這篇文章主要介紹了Spring Cloud Gateway 修改HTTP響應(yīng)信息的方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 非常全面的Java?SpringBoot點(diǎn)贊功能實(shí)現(xiàn)

    非常全面的Java?SpringBoot點(diǎn)贊功能實(shí)現(xiàn)

    但是這些功能再項(xiàng)目中是高頻出現(xiàn)的,如果直接操作數(shù)據(jù)庫的話,對數(shù)據(jù)庫壓力太大。那遇到這個(gè)問題怎么解決?這篇文章主要給大家介紹了關(guān)于Java?SpringBoot點(diǎn)贊功能實(shí)現(xiàn)?的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • jdk11?jdk17多版本共存切換方式

    jdk11?jdk17多版本共存切換方式

    這篇文章主要介紹了jdk11?jdk17多版本共存切換方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Java實(shí)現(xiàn)兩人五子棋游戲(六) 行棋方變換

    Java實(shí)現(xiàn)兩人五子棋游戲(六) 行棋方變換

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)一個(gè)簡單的兩人五子棋游戲,行棋方變換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java打印出菱形圖案實(shí)例詳解

    java打印出菱形圖案實(shí)例詳解

    在本篇文章里小編給大家分享的是關(guān)于java打印出菱形圖案實(shí)例詳解,需要的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON

    java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON

    本篇文章主要介紹了java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON,Jackson將Java對象轉(zhuǎn)換成json對象和xml文檔,同樣也可以將json、xml轉(zhuǎn)換成Java對象,有興趣的可以了解一下。
    2017-02-02
  • java自帶的工具Jstack截取進(jìn)程中的堆棧信息

    java自帶的工具Jstack截取進(jìn)程中的堆棧信息

    本文給大家記錄的是java自帶的工具Jstack截取進(jìn)程中的堆棧信息的方法,非常的實(shí)用,有需要的小伙伴可以參考下。
    2016-01-01
  • Java8新特性Stream流實(shí)例詳解

    Java8新特性Stream流實(shí)例詳解

    Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列。這篇文章主要介紹了Java8新特性Stream流的相關(guān)資料,需要的朋友參考下吧
    2017-10-10
  • 通過實(shí)例學(xué)習(xí)JAVA對象轉(zhuǎn)成XML輸出

    通過實(shí)例學(xué)習(xí)JAVA對象轉(zhuǎn)成XML輸出

    這篇文章主要介紹了通過實(shí)例學(xué)習(xí)JAVA對象轉(zhuǎn)成XML輸出,做流程圖的項(xiàng)目時(shí),新的流程定義為xml的,需要對xml與java對象進(jìn)行互轉(zhuǎn),下面我們來深入學(xué)習(xí),需要的朋友可以參考下
    2019-06-06
  • Java?Map接口概述和常用方法詳解

    Java?Map接口概述和常用方法詳解

    現(xiàn)實(shí)生活中,我們常會看到這樣的一種集合:IP地址與主機(jī)名,身份證號與個(gè)人,系統(tǒng)用戶名與系統(tǒng)用戶對象等,這種一一對應(yīng)的關(guān)系,就叫做映射。Java提供了專門的集合類用來存放這種對象關(guān)系的對象,即java.util.Map接口。本文就來聊聊Map接口概述和常用方法
    2022-10-10

最新評論