栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java利用栈区和堆区的关系,实现两个数交换的方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java利用栈区和堆区的关系,实现两个数交换的方法

目录


前言:

1.利用数组进行交换

2.利用对象的引用进行交换

总结:


 

前言:

总所周知,我们在学C语言指针的时候,老师总是会先让我们写一个交换两个数的swap函数,从而引起对指针的讲解。但是在java里面没有指针,那么我们如何实现两个数的交换呢?下面给大家介绍两种方法.

1.利用数组进行交换

用数组进行交换,就是要把你想要交换的两个数放到一个数组中,然后利用中间变量,对数组中的两个值进行交换。这个方法比较简单,直接看代码:

public static void swap(int[] arr){
        int temp =arr[0];
        arr[0] =arr[1];
        arr[1] = temp;
    }
    public static void main(String[] args) {
        int[] arr = {2,7};
        System.out.println(arr[0]+" "+arr[1]);
        swap(arr);
        System.out.println(arr[0]+" "+arr[1]);
    }

向上面的代码,我想要交换2和7,那么我就把2和7放到了一个数组中,然后利用temp这个中间变量进行交换。运行的结果就是:2 7 和 7 2

当然我想这个方法不是你想过要的,那么我们来看一下第二个方法。

2.利用对象的引用进行交换

先给大家看一下代码,看完代码再画图解释:

class Value{
    int n;
}
public class TEST {
    public static void swap(Value myval1,Value myval2){
        int temp = myval1.n;
        myval1.n = myval2.n;
        myval2.n = temp;
    }

    public static void main(String[] args) {
        Value val1 = new Value();
        val1.n = 2;
        Value val2 = new Value();
        val2.n = 7;
        System.out.println(val1.n+" "+ val2.n);
        swap(val1,val2);
        System.out.println(val1.n+" "+ val2.n);
    }
}

接下来我们来详细解析一下这段代码,看下图:

 我们假设再引用创建val1 val2和时候 是在栈区开辟空间了的,地址在堆区 假设val1地址为0x00ff36 val2的地址为0x00ff36 ,那么在栈区开辟的空间是指向堆区的 地址就是0x00ff36和0x00ff36  红色的部分是调用swap函数时开辟的区域,实参传给形参 他们的地址就是相同 指向同一个堆区  后面也是借用temp中间变量实现两个数的交换,也就是蓝色的部分,不改变地址,只改变值。

总结:

如果交换的两个数是局部变量,那么就没办法交换,因为栈上面的地址是无法获取的,没有指针这样的获得地址的东西,那么我们只能将想要交换的数据想办法放到堆上。这样才能进行交换。

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/932641.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号