温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java值传递之swap()方法不能交换怎么解决

发布时间:2020-10-30 17:01:22 来源:亿速云 阅读:139 作者:Leah 栏目:开发技术

这篇文章将为大家详细讲解有关Java值传递之swap()方法不能交换怎么解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

自己写了一个Swap测试类,代码如下:

swap不能交换原生数据类型以及字符串类型。

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”);应该是生成在堆中,是引用对象,但为什么交换不了?

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还是原来的值。其实就是值传递。不理解的话回去看看值传递。

但是这样用数组改写后便可实现交换功能了:

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)基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型;

2)引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;

区别:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要java中的栈、堆概念),

那么如何交换两个数值呢?

那么可以传递引用类型的数据,如对象或者数组,下面是传递的数组:

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()方法不能交换怎么解决就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI