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

  介绍

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

<>强自己写了一个交换测试类,代码如下:

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

 Swap5公共类
  {
  公共静态void main (String [] args)
  {//字符串x=皒111";//字符串y=皔111";
  字符串x=新的字符串(“x111");
  字符串y=新的字符串(“y111");
  交换(x, y);
  System.out.println (x);
  System.out.println (y);
  }
  
  公共静态空间交换(字符串,字符串b)
  {
  字符串temp=一个;
  a=b;
  b=temp;
  }
  }

运行结果:java Swap5

x111 y111

疑惑:注释部分不能交换可以理解为x和y生成在字符串池中,但是字符串x=新的字符串(“x111”);应该是生成在堆中,是引用对象,但为什么交换不了?

 Swap5公共类
  {
  公共静态void main (String [] args)
  {
  int [] i={3、5};
  
  交换(我);
  System.out.println(我[0]);
  System.out.println(我[1]);
  }
  
  公共静态空间交换(int [])
  {
  int temp=[0];
  [0]=[1];
  [1]=temp;
  }
  }

运行结果:

5

3

<强>

引用类型才可以交换,因为原生数据类型是直接赋值,而引用类型直接赋的是地址,地址指向的是同一个对象,所以能改变。

<强> Java参数值传递交换(a, b)——如何交换a, b的值

首先明白Java的数据类型分为两种:基本数据类型和引用数据类型

癑ava值传递之交换()方法不能交换怎么解决"

<强> Java中的参数传递机制:值传递

形参是基本数据类型的,将实参的值传递给形参的基本数据类型的变量

形参是引用数据类型的,将实参的引用类型变量的值(对象的首地址)传递给形参

<强>二者的概念:

1)基本类型:简单数据类型是不能简化的,内置的数据类型,由编程语言本身定义,它表示了真实的数字,字符和整数。

2)引用数据类型:Java语言本身不支持c++中的结构(结构)或联合(联盟)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。

<强> Java数据类型在内存中的存储:

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

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

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

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

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

 Swap5公共类
  {
  公共静态void main (String [] args)
  {
  int [] i={3、5};
  
  交换(我);
  System.out.println(我[0]);
  System.out.println(我[1]);
  }
  
  公共静态空间交换(int [])
  {
  int temp=[0];
  [0]=[1];
  [1]=temp;
  }
  }

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