一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java值傳遞之swap()方法不能交換的解決

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

2020-09-29 00:53秦彬桂 Java教程

這篇文章主要介紹了Java值傳遞之swap()方法不能交換的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

swap不能交換原生數據類型以及字符串類型。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
 }
}

運行結果:java Swap5

x111

y111

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
 }
}

運行結果:

java Swap

c: 3 d: 5

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

但是這樣用數組改寫后便可實現交換功能了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
 }
}

運行結果:

5

3

總結:

引用類型才可以交換。因為原生數據類型是直接賦值,而引用類型直接賦的是地址,地址指向的是同一個對象,所以能改變。

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

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

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

java中的參數傳遞機制:值傳遞

形參是基本數據類型的,將實參的值傳遞給形參的基本數據類型的變量

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

二者的概念:

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

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

Java數據類型在內存中的存儲:

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

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

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

那么如何交換兩個數值呢?

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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()方法不能交換的解決就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qbg291932598/article/details/69055864

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 香蕉免费一区二区三区 | 久久99精国产一区二区三区四区 | 五月天色小说 | 蜜桃影像传媒破解版 | 九九免费高清在线观看视频 | 亚洲欧美综合一区 | 摸逼网| 成人国产一区二区 | 免费一级特黄特色大片在线观看 | 美女和男人免费网站视频 | 国产99精品成人免费视频 | 免费毛片在线观看 | 成年男女免费大片在线观看 | 99久久精品免费看国产高清 | 69p69国产精品| 99在线视频观看 | 日本大学生xxxxx69泡妞 | 成人免费国产欧美日韩你懂的 | 久久人妻无码毛片A片麻豆 久久热这里只有 精品 | 亚洲精品人成网在线播放影院 | 亚洲国产精品综合久久一线 | 日韩一级精品视频在线观看 | www亚洲视频 | 国产精品久久99 | 爱情岛论坛亚洲自拍 | 激情小说欧美图片 | 久久99re2热在线播放7 | 99re精品在线| 忘忧草高清 | 青青草成人在线 | 无人在线高清观看 | 美女模特被c免费视频 | 国产青色 | 欧美作爱福利免费观看视频 | 青青国产在线视频 | 久久精品国产只有精品 | 欧美成人中文字幕在线看 | 成年人在线观看视频 | 金莲一级淫片aaaaaa | 国产探花视频在线观看 | 久久艹综合 |