直接上代码……

public class Swap {

    public static void main(String[] args) {
int a[] = new int[]{1,2};
System.out.println(a[0] + " "+a[1]);
swap(a,0,1);
System.out.println(a[0] + " "+a[1]); }
private static void swap(int[] a, int i, int j) { int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}

方法调用(call by) 是一个标准的计算机科学术语,方法调用根据参数传递的情况又分为值调用( call by reference ) 和引用调用( call by value ) 。江湖上有很多关于这两种调用的定义 ,最通常的说法是传递值的是值调用,传递地址的是引用调用。这其实很不恰当,这种 这些说法很容易让我们联想到Java的对象参数传递是引用调用,实际上,Java的对象参数传递仍然是值调用 。 在main里输出还是原来的2、3,不管传递的是引用类型还是对象实例。

public class Swap1
{
public static void main(String[] args)
{
Integer a=new Integer(2);
Integer b=new Integer(3);
TestSwap ts=new TestSwap(a,b);
System.out.println("before swap:");
ts.outPut();
ts.dataSwap1(a,b);
System.out.println("after swap:");
ts.outPut();
}
} class TestSwap
{
Integer a=null;
Integer b=null; public TestSwap(Integer a,Integer b)
{
this.a=a;
this.b=b;
}
/*这样不可交换,交换的只是拷贝过来的引用,而
* 输出还是成员变量(输出用的是类内的方法)
* 重要的是,形参和实参所占的内存地址并不一样,
* 形参中的内容只是实参中存储的对象引用的一份拷贝。
* */
protected void dataSwap0(Integer a,Integer b)
{
Integer temp=a;
a=b;
b=temp;
}
protected void dataSwap(Integer a,Integer b)
{
this.a = b;
this.b = a;
}
//这样也可以,不过需要类内的输出,就是说输出TestSwap的成员变量
protected void dataSwap1(Integer a,Integer b)
{
Integer temp=this.a;
this.a=this.b;
this.b=temp;
}
protected void outPut()
{
System.out.println("a="+a+" b="+b);
}
}

Java中swap解惑的更多相关文章

  1. Java中swap()实现

    Java中swap()实现 1.今天可爱的谭老师发了一道题目,使用java写方法交换Integer类型数据,而且入参固定了,题目请下图: 入参固定的话,当时想到的是重新定义一个自己的Integer类型 ...

  2. Java中的Swap,如何实现?

    程序员都知道,在C/C++里面交换值的方法: void swap(int &a,int &b) { int temp; temp=a; a=b; b=temp; } 但是在Java中这 ...

  3. java中的各种锁详细介绍

    转自:https://blog.csdn.net/axiaoboge/article/details/84335452 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高 ...

  4. JAVA中的for-each循环与迭代

    在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 ...

  5. JAVA中关于并发的一些理解

    一,JAVA线程是如何实现的? 同步,涉及到多线程操作,那在JAVA中线程是如何实现的呢? 操作系统中讲到,线程的实现(线程模型)主要有三种方式: ①使用内核线程实现 ②使用用户线程实现 ③使用用户线 ...

  6. java中两个值互换

    两个值互换有以下三种方式: 使用临时变量(此种方法便于理解) x = 10; y = 20; //begin int temp = x; x = y; y = temp; //end; //此时x = ...

  7. [转]Java中继承、多态、重载和重写介绍

    什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...

  8. 《Java中方法的参数传递方式只有一种:值传递》

    //方法的参数传递机制(1):基本类型做形参的传递. class PrimitiveTransferTest { public static void swap(int a,int b) { //下面 ...

  9. Redis学习记录之Java中的初步使用

    1.关于Redis redis下载地址:<span style="font-family: Arial, Helvetica, sans-serif;">http:// ...

随机推荐

  1. Android中的主题Theme

    系统自带的Theme: android以及为我们定义好了一些theme,需要是我们直接可以拿来使用. 常用的Theme通常如下:  android:theme="@android:style ...

  2. mac下versions 提交提示 SVN Working Copy xxx locked

    终端进入工程目录,执行 find . | grep ".svn/lock" | xargs rm

  3. UVa 10400 - Game Show Math 游戏中的数学 dfs+判重

    题意:给出一些数字和一个目标数字,要求你在数字间添加+-*/,让表达式能达到目标数字,运算符号的优先级都是一样的. 由于数据量很大,本来想用map<string>判重的,结果还是超时了,然 ...

  4. mysql内核源代码深度解析 缓冲池 buffer pool 整体概述

    http://blog.csdn.net/cjcl99/article/details/51063078

  5. 常用Content-type汇总

    Content-Type,内容类型,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式.什么编码读取这个文件.这里汇总一下常用的,所有资料来源于网络,未经测试:  文件后缀 处理方式  .* ...

  6. [转] 使用NVM快速搭建NODE开发环境

    export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node 本文主要介绍最近自己碰到的几个坑以及搜索到的相应解决方案: 如何快速搭 ...

  7. switch-case参数类型

    switch语句用法: 0. switch语句由一个控制表达式和多个case标签组成 1. switch控制表达式支持的类型有byte.short.char.int.enum(JDK5).String ...

  8. android MediaCodec 音频编解码的实现——转码

    原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说 ...

  9. C# 自定义控件制作和使用实例(winform)

    C# 自定义用户控件 此处为转载文章,用于记录自我学习过程,原文链接地址http://blog.csdn.net/xiongxuanwen/article/details/2605109 上篇:控件制 ...

  10. 快速打出System.out.println("");

    sysout---->Alt+/--->System.out.println():