int-JAVA中参数传递问题,为什么ab的值不被改变, 怎样才能被改变!

问题描述

JAVA中参数传递问题,为什么ab的值不被改变, 怎样才能被改变!

public class MyTest {
public static int c =1;
public static int d = 2;
public static void main(String[] args) {

    System.out.print("交换前ta=" + c + "tb=" + d + "r");
    Swap(c, d);
    System.out.print("交换后ta=" + c + "tb=" + d + "r");
}

// 交换a,b两个变量的值
public static void Swap(int c, int d) {
    int temp = c;
    c = d;
    d = temp;
    System.out.print("方法内ta=" + c + "tb=" + d + "r");

}

}
结果:
交换前 a=1 b=2
方法内 a=2 b=1
交换后 a=1 b=2

为什么ab的值不变,怎么才能改变ab呢?不是标记为静态存储了吗

解决方案

改为object或者利用数组
参考:
http://blog.csdn.net/jianzhizg/article/details/1427086

希望采纳我的答案哦 ^_^

解决方案二:

java中基本类型没有指针和引用的概念,肯定没有C和C++或者C#之类的方便,但可以借助面向对象的方式,封装一个类。
类似


/**
 * A instance of this class will have a ability to swap two integers.

 */
class Swaper
{
    int x, y;

    public Swaper(int x, int y)
    {
        super();
        this.x = x;
        this.y = y;
    }

    // The swap behavior is belong to a Swaper object.
    public Swaper swap()
    {
        return new Swaper(this.y, this.x);
    }
}

public class JavaDemo
{
    public static void main(String[] args)
    {
        int x = 3;
        int y = 4;

        System.out.println("x: " + x + ", y: " + y);

        Swaper swaper = new Swaper(x, y);

        x = swaper.swap().x;
        y = swaper.swap().y;

        System.out.println("x: " + x + ", y: " + y);
    }
}

解决方案三:

为什么值没有变,原因有以下几点:
1 值传递;
2 就近原则。

修改方式:
1:如上;
2. 要实现效果,只需在原基础上去掉swap中的参数就可以,因为您的c d.已是静态,去掉参数后,用的就是外面的cd

解决方案四:

你缺少的只是 值传递 和 引用传递的概念

解决方案五:

原因是非引用传递,这个自行补脑java基础吧

解决方案六:

你用的是 方法(参数)这样的方式来做,尤其你的参数还是int 这种好拷贝的参数。造成的结果就是在内存中新开创了一个拷贝值然后拿去交换,原值是不变的。
Java对象是引用传参,数组是地址传参,所以改了会被承认。但是拷贝传参不会被承认的。既然是静态的变量,直接用this加点的方式直接在方法里给改了不就行了嘛

时间: 2024-08-03 23:11:41

int-JAVA中参数传递问题,为什么ab的值不被改变, 怎样才能被改变!的相关文章

Java中参数传递类型只有值传递

Java核心技术卷I里有一个结论我觉得挺有意思的:java中没有引用传递,只有值传递 首先看定义: 值传递,是指方法接收的是调用者提供的值 引用传递,是指方法接收的是调用者提供的变量地址 以前学习C++时把参数传递分为值传递和引用传递,国内的不少java教材愿意把对象的传递理解是引用传递,为什么它们会这么说呢?可以看下面一个例子: import java.util.Calendar; public class ChangeValue { public static void main(Strin

java中如果需要返回多个值怎么办

Java中如果需要返回多个值怎么办 首先我们明确一下:java方法的返回值只有一个,但是返回值的类型不限 有一种编程语言可以返回多个值 Python,实例如下:  运行结果如下: [whuang@huangwei function2]$ ./function_dict02.py My name is  Walter My age is  23   在java中如何达到相同的目的呢? (1)把这多个返回值再封装成为对象 可以封装成为java bean,数组,ArrayList ,甚至Map 下面看

Java中常见的日期操作(取值、转换、加减、比较)_java

Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提供了可行的解决方案,并不保证是最佳实践,欢迎讨论. 1. 日期取值 在旧版本 JDK 的时代,有不少代码中日期取值利用了 java.util.Date 类,但是由于 Date 类不便于实现国际化,其实从 JDK1.1 开始,就更推荐使用 java.util.Calendar 类进行时间和日期方面的处

字符串-java中String究竟是传递的值,还是引用

问题描述 java中String究竟是传递的值,还是引用 很多人说,java中的String虽然是对象,但是具有值类型的特征.他是值传递,传递的值. 我认为这这种说法完全是错误的. String和普通对象毫无区别,和其他对象一样,传递的是引用,而不是值. 一段String的运用代码: String a = "123"; public void change(String a){ a = "234"; } 很多人会说,a的值没有变,是因为String是值传递,问题是,

java中怎么修改方法的返回值

问题描述 mybatis MappedStatement类中有个方法getBoundSql()返回对象是BoundSql ,怎么用我自己的BoundSql对象来替换这个方法的返回?public BoundSql getBoundSql(Object parameterObject) { BoundSql boundSql = sqlSource.getBoundSql(parameterObject); List<ParameterMapping> parameterMappings = bo

Java中函数参数传递和数据存储

值传递是将要传递的值作为一副本传递的..引用传递,传递的是引用对象的内存地址..例如: int i=4;  int j=i;   //相当于把4复制了一个副本赋给了j 输出结果是i=4 ,j=4 Cint *p,*p1;int j=5;p=j;    //这里是把j在内存当中的地址赋给了指针pp1=p;   //这里是把指针p中保存的地址(就是j的地址)赋给了指针p1 j=4;    //这里改变j的值 输出结果是  j=4  ,  *p=4  ,  *p1=4  //因为p和p1指向的都是j

java中如何区分值传递和引用传递

java中值传递和引用传递一直饱受争议难以区分,下面我通过几个例子来区分一下什么时间是值传递,什么时间是引用传递 1:首先先说值传递:基本类型(int ,float ,long,byte,short ,double, char,boolean)作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的 package com.test.list; public class Test1 { public static void main(String[] args) { int i

char-java中参数传递变换的问题,求问:结果为什么是这样的啊??求高手解答!拜谢~

问题描述 java中参数传递变换的问题,求问:结果为什么是这样的啊??求高手解答!拜谢~ 求问:结果为什么是这样的啊?? change:Test change:g change:b change:c TestPram:Hello TestPram:g TestPram:b TestPram:c 代码如下: public class TestPram { String str = "Hello"; char[] ch = {'a','b','c'}; public static void

Java中的Calendar日历API用法完全解析_java

第一部分 Calendar介绍Calendar 定义: public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {} Calendar 可以看作是一个抽象类. 它的实现,采用了设计模式中的工厂方法.表现在:当我们获取Calendar实例时,Calendar会根据传入的参数来返回相应的Calendar对象.获取Calendar实例,有以下两种方式: (1) 当我们通过 Cale