直接上代码……

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. 数学之路-分布式计算-disco(4)

    第一个參数iter是一个迭代器,涉及被map函数产生的键和值.它们是reduce实例. 在本例中.单词随机被托付给不同的reduce实例.然后,要单词同样,处理它的reduce也同样.可确保终于合计是 ...

  2. The Arduino IDE(compiler)'s float bug

    1.通常直接使用串口的print函数就ok Serial.println(DHT.humidity);  //assuming DHT.humidity is float 2.但是习惯问题,还是偏好s ...

  3. java实现渐变效果工具

    [html] view plain copy package gradient; import java.awt.Color; import java.awt.Dimension; import ja ...

  4. 关于String的hashCode

    String str=new String("abc"); String str2="abc"; System.out.println(str.hashCode ...

  5. Log4j 2.0 使用说明

      原文地址:http://blog.csdn.net/welcome000yy/article/details/7962447 Log4j 2.0 使用说明(1) 之HelloWorld 最近刚接触 ...

  6. 关于Sublime Text3 pyV8无法加载的问题

    昨天切换到sublime text 3  安装 emmet插件 不起作用  提示  pyv8 无法加载 手动下载安装解决 问题描述 PyV8 Binaries Archive of pre-compi ...

  7. php 多维数组转换

    把字符类型转换成时间类型的,先用foreach遍历出来时间,在通过时间函数转换成时间格式; 例子: <?phpecho "<pre>";$lsrfield = a ...

  8. linux进程地址空间详解(转载)

    linux进程地址空间详解(转载) 在前面的<对一个程序在内存中的分析 >中很好的描述了程序在内存中的布局,这里对这个结果做些总结和实验验证.下面以Linux为例(实验结果显示window ...

  9. 初识 Angular 体会

    一句话描述:一个前端的类似MVC框架的JS库 刚接触2天,刚一看感觉和asp.net mvc能实现的功能有点重复. 虽然asp.net的表单验证,Razor语法使其在前端开发有较大提升,但要实现比较高 ...

  10. SQL Server 2012 LocalDB 管理之旅

    SQL Server LocalDB能够最大限度地节省您的数据库管理精力,以便开发人员可以专注于开发数据库应用. 使用SqlLocalDB命令行管理LocalDB 为了方便管理,LocalDB提供了一 ...