c/c++和java实现swap函数的不同处
来源:互联网 发布:软件行业销售模式 编辑:程序博客网 时间:2024/05/18 08:51
c/c++和java实现swap函数的不同处
2014-05-06 11:59 2255人阅读 评论(0)收藏举报
本文章已收录于:
分类:
作者同类文章X
版权声明:本文为博主原创文章,未经博主允许不得转载。
首先我们来看一下在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世界中函数或者叫方法的入参都是通过值拷贝的方式进行传递:
- 原始类型(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)方法;
非数组中的元素交换,可以使用最原始的交换方法,可以实现交换;也可以使用上面提到的重定义类的方式、外部内联的方式,视情况而定
非数组中的元素交换,可以使用最原始的交换方法,可以实现交换;也可以使用上面提到的重定义类的方式、外部内联的方式,视情况而定
- 顶
- 1
- 踩
- 0
- 上一篇《Thinking in Algorithm》16.堆结构之斐波那契堆
- 下一篇c语言之struct
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);
}
//javac Swap1.java
//java Swap1
//a is10
//b is20
}
0 0
- c/c++和java实现swap函数的不同处
- c/c++和java实现swap函数的不同处
- c/c++和java实现swap函数的不同处
- java实现c/c++ swap函数(java反射)
- C++PassingBy Reference之Swap函数的实现
- 【C学习】swap函数的多种实现对比
- C语言实现泛型swap函数
- C语言swap函数
- C语言swap函数
- java 和 c/cpp 的不同
- C中^和Java中^的不同
- C语言和java的不同
- 线程同步生产者和消费者c和java不同实现
- c++中的函数 和 c 函数的不同
- java中swap函数的实现分析
- c语言swap函数总结
- C语言swap函数总结
- c语言swap函数总结
- Android——网络 GET请求+POST请求
- imageview怎么在代码中设置src
- hud 5821 Ball
- 剑指offer面试题53
- Java/Android引用类型及其使用分析
- c/c++和java实现swap函数的不同处
- 动态Button的android:drawableTop
- 使用jdbc-pool替代dbcp、c3p0等连接池的原因
- 树莓派使用USB数据线连接到手机的USB共享上网
- hdu 1710 Binary Tree Traversals
- Tomcat的JDBC连接池
- NOIP2007 矩阵取数 DP+高精度
- MyBatis 3.2.x版本在并发情况下可能出现的bug及解决办法
- java中this用法