c/c++和java达到swap不同功能
首先我们来看看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++中引用不同)传參,通过该引用可以更改其指向的对象内部值。可是更改该引用值,仅对函数内部可见,函数外部的实參依旧没有改变;
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);
}
}
非数组中的元素交换。能够使用最原始的交换方法。能够实现交换;也能够使用上面提到的重定义类的方式、外部内联的方式,视情况而定
版权声明:本文博主原创文章,博客,未经同意不得转载。
c/c++和java达到swap不同功能的更多相关文章
- Java中swap()实现
Java中swap()实现 1.今天可爱的谭老师发了一道题目,使用java写方法交换Integer类型数据,而且入参固定了,题目请下图: 入参固定的话,当时想到的是重新定义一个自己的Integer类型 ...
- Java 基本数据类型 sizeof 功能
Java 基本数据类型 sizeof 功能 来源 https://blog.csdn.net/ithomer/article/details/7310008 Java基本数据类型int 32b ...
- Java实现发邮件功能---网易邮箱
目录 Java实现发邮件功能 前言 开发环境 代码 效果 结束语 Java实现发邮件功能 前言 电子邮件的应用场景非常广泛,例如新用户加入,即时发送优惠清单.通过邮件找回密码.监听后台程序,出现异常自 ...
- Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比
Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比: Unix/Linux (Bash) Windows(MS-DOS) Java 进入目录 cd cd - 创建 ...
- ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能
一.ES7 sql新特性 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 四个字段 PUT /tvs PUT /tvs/_mapping { "properties&quo ...
- Java 8五大主要功能为开发者提供了哪些便利?
两年前当Java 8发布后,立即受到了业界的欢迎,因为它大大提高了Java的性能.它独特的卖点是,顾及了编程语言的每一个方面,包括JVM(Java虚拟机)和编译器,并且改良了其它帮助系统. Java是 ...
- 初来乍到 Java 和 .Net 迭代器功能
最近有一个需求是这样的, 根据键值对存储类型数据,也算是数据缓存块模块功能设计. 一个键对应多个值.每一个键的值类型相同,但是每个不同的键之间类型不一定相同. Java 设计如下 HashMap< ...
- 动力节点Java培训告诉你Java线程的多功能用法
现在的java开发可谓是八仙过海各显神通啊!遥想当下各种编程语言萎靡不振,而我Java开发异军突起,以狂风扫落叶之态,作为Java培训行业的黄埔军校,为了守护Java之未来,特意总结了一些不被人所熟知 ...
- java中实现定时功能
网上资料: 我们可以使用Timer和TimerTask类在java中实现定时任务,详细说明如下: 1.基础知识java.util.Timer一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务 ...
随机推荐
- Nginx各版本的区别
Nginx官网提供了三个类型的版本Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版 ...
- CC2530存储空间——Code
硬件平台:CC2530-F256 开发环境:IAR 8051(版本号 8.10) 參考: .<CC2530 User's Guide.pdf>(swru191c) .<IAR C/C ...
- 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法
假设synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和g ...
- 一个简单的样例看明确怎样利用window.location.hash实现ajax操作时浏览器的前进/后退功能
我们知道JavaScript中非常早就提供了window.history对象,利用history对象的forward().go().back()方法可以方便实现不同页面之间的前进.后退等这样的导航功能 ...
- 第二章_session管理
2.1 URL重写 URL重写是Session追踪技术.须要将一个或多个token做为一个查询字符串加入到一个URL中. Token的格式通常是键=值. Url?key-1=value-1&k ...
- Webpact打包React后端Node+Express
Webpact打包React后端Node+Express 前言 React官方推荐用Browserify或者Webpack 来开发React组件. Webpack 是什么?是德国开发者 Tobias ...
- zoj-3795-Grouping-tarjan确定最长的公路收缩
使用tarjan缩合点. 然后,dfs寻找最长的公路. 水体. . . #include<stdio.h> #include<string.h> #include<alg ...
- Shell 文字 顶替tomcat星团war包裹
执行前server造成免费ssh登陆. 修改配置文件不是太大 您可以覆盖原有的配置 profile 简介 bak=/home/wsm/bak webapps=/home/wsm/webapps/WSM ...
- 学习笔记之TCP/IP协议的重要性
1. 随处可见的协议 在计算机网络与信息通信领域里,人们常常提及"协议"一词.互联网中常 用的具有代表性的协议有IP.TCP.HITP等. 而LAN(局域网)中经常使用的协 ...
- 谈论高并发(十二)分析java.util.concurrent.atomic.AtomicStampedReference看看如何解决源代码CAS的ABA问题
于谈论高并发(十一)几个自旋锁的实现(五岁以下儿童)中使用了java.util.concurrent.atomic.AtomicStampedReference原子变量指向工作队列的队尾,为何使用At ...