C/C++和Java达到swap不同功能
作者:网络转载 发布时间:[ 2015/10/19 10:52:51 ] 推荐标签:测试开发技术 开发语言
首先我们来看看c/c++实施swap性能
void swap ( int & a, int & b)
{
int Temp;
temp = a;
a = b;
b = temp;
}
那么在java中是否还能这样呢。非常显然java中没有地址引用符号了。
首先我们来看下c/c++和java的差别。
本质差别
C/C++中swap功能的本质:通过传递变量地址(指针或引用)来交换变量地址中的值。
Java标榜当中对C/C++一个非常大的改进是:Java对程序猿屏蔽了变量地址的概念,降低指针误用。
在Java世界中函数或者叫方法的入?都是通过值拷贝的方式进行传递:
原始类型(char。int。double等)都是通过直接拷贝变量值传?;
对象类型都是通过引用拷贝(跟C++中引用不同)传?,通过该引用可以更改其指向的对象内部值。可是更改该引用值,仅对函数内部可见,函数外部的实?依旧没有改变;
从上面能够看出通过地址的方式在java中是不可能实现的。由于java严格遵循值传递(pass-by-value)。
java传递是引用的拷贝。既不是引用本身。更不是对象。
但没有解决不了的问题,我们能够利用其它方法来实现:
Method1:用数组交换值(对于数组中的元素的交换,所以常常在排序中看到)
Public static void swap ( int [] Data, int a, int b) {
int t = Data [a];
data [a] = data [b];
data [b] = t;
}
Method2:用重定义类(自定义的)
Class MyInteger {
Private int x; / / the x as the only data member
Public MyInteger ( int xIn) {x = xIn;} / / Constructor
Public int getValue () { return x;} / / get the value
Public void insertValue ( int xIn) {x = xIn;} / / change the value of the
}
Public Class Swapping {
/ / Swap: pass object references
static void swap (MyInteger rWrap, MyInteger sWrap) {
/ / Change the value of the process
int t = rWrap.getValue ();
rWrap.insertValue (sWrap.getValue ());
sWrap.insertValue (t);
}
Public static void main (String [] args) {
int a = 23 , b = 47 ;
System.out.println ( "Before. a:" + a + ", b:" + b);
MyInteger AWRAP = new MyInteger (a);
MyInteger bWrap = new MyInteger (b);
swap (aWrap, bWrap);
a = aWrap.getValue ();
b = bWrap.getValue ();
System.out.println ( "After. a:" + a + ", b:" + b);
}
}
Method3:外部内联法
Public Class Swap2 {
Public static void main (String args []) {
Swap2 SW = new Swap2 ( 1 , 2 );
System.out.println ( "i is" + sw.i);
System.out.println ( "J is" + sw.j);
sw.swap ();
System.out.println ( "i is" + sw.i);
System.out.println ( "J is" + sw.j);
}
int i, J;
Public Swap2 ( int i, int J) {
this . i = i;
this . J = J;
}
Public void swap () {
int Temp;
temp = i;
i = j;
j = temp;
}
}
Public Class swap1 {
Public static void swap1 (Integer a, Integer b) {
Integer temp = a;
a = b;
b = temp;
}
Public static void main (String args []) {
Integer a, b;
a = new Integer ( 10 );
b = new Integer ( 20 );
Swap1.Swap1 (a, b);
System.out.println ( "a is" + a);
System.out.println ( "b is" + b);
}
}
总结:
数组中的元素交换。能够使用下文中的public static void swap(int[] data, int a, int b)方法;
非数组中的元素交换。能够使用原始的交换方法。能够实现交换;也能够使用上面提到的重定义类的方式、外部内联的方式,视情况而定
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11