想要通过对象方法交换两个数组中的值

目前采用了两种方法:

(1)一次交换二者数组中的值

(2)交互两数组的数组名


(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Person {

public void changeArray(int[] x, int[] y) {
for (int i = 0; i < x.length; i++) {
int c = x[i];
x[i] = y[i];
y[i] = c;
}
}

public static void main(String[] args) {
Person p = new Person();
int[] a = {4, 5, 6};
int[] b = {1, 2, 3};
p.changeArray(a, b);
System.out.println("a数组交换后的值:");
for (int value : a) {
System.out.print(value + " ");

}
System.out.print('\n');
System.out.println("b数组交换后的值:");
for (int value : b) {
System.out.print(value + " ");

}
}
}

执行结果:

a数组交换后的值:
1 2 3
b数组交换后的值:
4 5 6

可见该种方法可以实现数组中值的兑换,但这种方法存在一些问题,用循环的方法挨个进行数组内的元素,性能比较慢。并且交换的时候需要保证两个数组的长度是一致的

(2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class Person {

public void changeArray(int[] x, int[] y) {
int[] c;
c = x;
x = y;
y = c;
}

public static void main(String[] args) {
Person p = new Person();
int[] a = {4, 5, 6};
int[] b = {1, 2, 3};
p.changeArray(a, b);
System.out.println("a数组交换后的值:");
for (int value : a) {
System.out.print(value + " ");

}
System.out.print('\n');
System.out.println("b数组交换后的值:");
for (int value : b) {
System.out.print(value + " ");

}
}
}

执行结果:

a数组交换后的值:
4 5 6
b数组交换后的值:
1 2 3

对于第二种方式,发现执行后数组内元素并没有进行交换

第二种方式在内存中的执行过程:

1.首先加载类模板到存储区的方法区中

2.在堆内存中开辟空间,与方法区中类模板结构一致,p对象进到栈内存中,指针指向堆内存的开辟空间

3.数组a和b在栈内存中,存储的为地址,数组的值存储在堆内存中

4.调用方法执行
方法是堆内存中的方法,方法存储在堆内存对象空间内
方法执行where? 栈内存中开辟一块临时空间来执行方法

5.方法中根据形参创建数组类型的x和y,调用时把a和b分别给x和y,a和b中的存储内容为地址,所以此时x指向a指向的内容,y指向b指向的内容,跟据方法中执行内容,会在创建数组类型的c,接着进行交换,最终效果为x和y发生了互换,x中指向的为b指向的内容,y中指向的为a指向的内容

4.整个方法执行完毕后,临时空间会被清除,但关键的是,x和y指向的内容发生了互换,a和b的空间和内容并没有发生交换

解决方法:想要通过第二种方法使得a和b的内容发生互换,就要想办法在临时空间被清除前,保留下x和y,即要返回,通过return实现。

方法的返回值只有一个,返回类型也只有一种

解决(2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class Person {

public int[][] changeArray(int[] a, int[] b) {
int[] c = a;
a = b;
b = c;
int[][] reslut = {a, b};
return reslut;
}

public static void main(String[] args) {
Person p = new Person();
int[] a = {4, 5, 6};
int[] b = {1, 2, 3};
int[][] v = p.changeArray(a, b);
a = v[0];
b = v[1];
System.out.println("a数组交换后的值:");
for (int value : a) {
System.out.print(value + " ");

}
System.out.print('\n');
System.out.println("b数组交换后的值:");
for (int value : b) {
System.out.print(value + " ");

}
}
}

执行结果:

a数组交换后的值:
1 2 3
b数组交换后的值:
4 5 6
相关文章
评论
分享
  • JavaEE开发准备

    个人电脑硬件配置: Windows 10 64位家庭中文版 8G运行内存 Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 1.Java JDK安装及配置(1)下载和安装首先进入oracle网站中Ja...

    JavaEE开发准备
  • JSP综合作业

    预备:数据库本次作业选择的数据库为MYSQL,采用的数据库管理工具为Navicat Premium12。MYSQL下载地址为https://dev.mysql.com/downloads/mysql/ 使用Navicat连接数据库。 ...

    JSP综合作业
  • JSP实现简单的购物车

    主要知识点:jsp指令标记、动作标记、内置对象request、response、session等的使用。 直接上代码: login.jsp: 1234567891011121314151617181920212223242526272...

    JSP实现简单的购物车
  • JSP初识

    JSP(Java Server Page),由Sun公司倡导,许多公司参与,于1999年(与我年龄一样!!!)推出的一种Web服务设计标准。 注释HTML注释: 1<!--需要注释的HTML内容--> JSP注释: 1&...

    JSP初识
  • Java工具类

    API(Application Programming Interface)1.包装类Java是面向对象的语言,但其中存在基本类型,违背了面向对象的思想。 包装类是基本类型与引用类型之间交换的桥梁 类型 包装类 byte ...

    Java工具类
  • Java设计模式

    设计模式:设计模式常用的有23种。设计模式是一种设计经验的总结,为了解决某些场景下的某一类的问题,是一种通用的解决方案 创建型(5):解决对象创建的过程 结构型(7):把类或对象通过某种形式结合在一起 行为型(11):解决类或对象之间...

    Java设计模式
  • Scanner类的学习

    Scanner类导包:java.util 创建对象:Scanner input =new Scanner(System.in); 使用: int value = input.nextInt(); ​ String va...

    Scanner类的学习
  • Java入门到入土

    Java体系12345678910111213141516171819202122基础部分(JavaSE):1.面向对象的编程思想2.集合3.I/O流 底层MVC4.文件5.缓存6.反射、注解数据库(JDBC)+WEB(JavaEE)...

    Java入门到入土
  • Windows下neo4j的安装

    neo4j是一个高性能的NOSQL图形数据库,他将结构化数据存储在网络上而不是表中。他是一个嵌入式的、基于磁盘的、具备完全的事物特性的Java持久化引擎,neo4j也可看做是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。——百度...

    Windows下neo4j的安装
  • java实现类FTP程序

    继承程序设计实验,实验说明如图所示: 集成程序设计实验 TCP实现首先说明下基于TCP实现的功能: (1)能够实现多用户的同时连接 (2)用户执行成功的命令会在其他用户终端上显式说明 (3)当前用户数以及在线情况会在服务端实时显...

    java实现类FTP程序
Please check the comment setting in config.yml of hexo-theme-Annie!