精华内容
下载资源
问答
  • java引用传递

    2014-04-29 20:13:20
    java引用传递简单理解就是一块堆内存空间可以被多个栈内存所指向

    java引用传递简单理解就是一块堆内存空间可以被多个栈内存所指向(一个人可以有很多个外号,但都是代表这个人),下面的代表性的例子:

    public class Test {
    long money;
    long height;
    String des;


    public static void main(String args[]) {
    Test diaosi = new Test();
    diaosi.money = 10000;
    diaosi.height = 170;
    diaosi.des = "geek";
    Test coder = diaosi;
    coder.height = 177;
    System.out.println(diaosi.height);
    System.out.println(coder.height);


    Test gaofushuaiTest = new Test();
    gaofushuaiTest.money = 1000000;
    gaofushuaiTest.height = 180;
    gaofushuaiTest.des = "handsome";


    diaosi = gaofushuaiTest;
    System.out.println(diaosi.money);
    System.out.println(diaosi.height);
    System.out.println(diaosi.des);
    }
    }


    输出结果:

    177
    177
    1000000
    180
    handsome

    展开全文
  • Java引用传递

    2019-03-28 11:52:58
    大多数人的说法是Java中参数传递有两种方法一种是值传递一种是引用传递 这种说法并没有什么错误,但是很多学过c/c++的容易将c/c++中的引用调用与Java引用传递弄混 引用传递实际上是把对象的地址的值传递给参数。...

    在Java方法的大量调用中无法避免的将涉及到参数的使用和传递。

    大多数人的说法是Java中参数传递有两种方法一种是值传递一种是引用传递

    这种说法并没有什么错误,但是很多学过c/c++的容易将c/c++中的引用调用与Java中引用传递弄混

    引用传递实际上是把对象的地址的值传递给参数。

    下面来举出一个反例

    public class Test {
    	
    	
    	
    	static void TestMethod(TestClass a,TestClass b) {
    		TestClass temp=a;
    		a=b;
    		b=temp;
    		System.out.println(a+"a参数地址");
    		System.out.println(b+"b参数地址");
    		b.add();//此时b是a
    	}
    	
    	
    	public static void main(String[] args) {
    		TestClass a = new TestClass();
    		TestClass b = new TestClass();
    		System.out.println(a+"a参数地址");
    		System.out.println(b+"b参数地址");
    		System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!");
    		Test.TestMethod(a, b);
    		System.out.println("?????????????????????????");
    		System.out.println(a.data);
    		System.out.println(a+"a参数地址");
    		System.out.println(b+"b参数地址");
    	}
    	
    }
    
    class TestClass{
    	int data;
    	public int getData() {
    		return data;
    	}
    
    	public void setData(int data) {
    		this.data = data;
    	}
    	
    	public void add() {
    		this.data++;
    	}
    }

    若Java中的引用使用与c/c++中一样则

    在经过TestMethod的操作后其原来的地址值将发生变化。事实并不是这样。

    下面是执行结果,我们可以得出结论Java中方法对参数的操作并不会改变原本参数的值,只会改变形参的值。

    但是方法中调用引用传递参数的方法可以改变引用传递参数内部属性的值。

    展开全文
  • Java 引用传递

    2016-09-11 21:08:46
    学了这么久的java,其实就明白有一个核心点,就是学会引用传递,你就觉得你明白java的精髓,就是来源于生活,面向生活。值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,...

    学了这么久的java,其实就明白有一个核心点,就是学会引用传递,你就觉得你明白java的精髓,就是来源于生活,面向生活。

    值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

    引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

    public class ParamTest {
    public static void main(String[] args){

        /**
            * Test 1: Methods can't modify numeric parameters
            */
            System.out.println("Testing tripleValue:");
            double percent = 10;
            System.out.println("Before: percent=" + percent);
            tripleValue(percent);
           System.out.println("After: percent=" + percent);
    
           /**
            * Test 2: Methods can change the state of object parameters
            */
           System.out.println("\nTesting tripleSalary:");
           Employee harry = new Employee("Harry", 50000);
           System.out.println("Before: salary=" + harry.getSalary());
           tripleSalary(harry);
           System.out.println("After: salary=" + harry.getSalary());
    
           /**
            * Test 3: Methods can't attach new objects to object parameters
            */
           System.out.println("\nTesting swap:");
           Employee a = new Employee("Alice", 70000);
           Employee b = new Employee("Bob", 60000);
           System.out.println("Before: a=" + a.getName());
           System.out.println("Before: b=" + b.getName());
           swap(a, b);
           System.out.println("After: a=" + a.getName());
           System.out.println("After: b=" + b.getName());
     }
    
      private static void swap(Employee x, Employee y) {
         Employee temp = x;
         x=y;
         y=temp;
         System.out.println("End of method: x=" + x.getName());
         System.out.println("End of method: y=" + y.getName());
     }
    
    private static void tripleSalary(Employee x) {
         x.raiseSalary(200);
         System.out.println("End of method: salary=" + x.getSalary());
    }
    
       private static void tripleValue(double x) {
       x=3*x;
       System.out.println("End of Method X= "+x);
    }
    

    }
    显示结果:
    Testing tripleValue:
    Before: percent=10.0
    End of Method X= 30.0
    After: percent=10.0

    Testing tripleSalary:
    Before: salary=50000.0
    End of method: salary=150000.0
    After: salary=150000.0

    Testing swap:
    Before: a=Alice
    Before: b=Bob
    End of method: x=Bob //可见引用的副本进行了交换
    End of method: y=Alice
    After: a=Alice //引用本身没有交换
    After: b=Bob

    展开全文
  • JAVA引用传递

    2013-09-03 08:44:35
    public class TestAppend { public static void change(StringBuffer x,StringBuffer y) { x.append(y); //x-->AB x = y; //x指向y-->B
    public class TestAppend {
            public static void change(StringBuffer x,StringBuffer y)
            {
                    x.append(y);           //x-->AB
    	        	x = y;         //x指向y-->B
                    System.out.println(x);//x-->B
                    System.out.println(y);//y-->B
            }
            public static void main(String [] args)
            {
                    StringBuffer a = new StringBuffer("A");//a-->A
                    StringBuffer b = new StringBuffer("B");//b-->B
                    change(a,b);
                    System.out.println(a);//a-->AB
                    System.out.println(b);//b-->B
            }
    }

    打印结果:
    B
    B
    AB
    B
    展开全文
  • Java 引用传递与值传递 【背景】 首先 Java 中没有值传递和引用传递的概念,所谓 pass by value 和 pass by reference 只是从其他语言引申的概念而已。所以你会听到有人说 ”Java 中没有引用传递,全部都是值传递...
  • Java引用传递
  • java引用传递与值传递

    2016-10-08 11:36:57
    [b]java引用传递与值传递[/b] 1.在Java里面基本类型(int,long,String等)参数传递都是值传递,即参数的改这不会对原来值的改变。其他类型(list,array,map等)为引用传递。 2.基本类型就是JDK不提供方法操作的...
  • Java引用传递和值传递

    2015-06-10 14:43:06
    Java引用传递: 首先需要明确一点,引用的含义,引用是个通用名词,在C++中表示变量的别名,而在Java中,引用类似于C++的指针,但又不太相同,因为Java的引用并不需要你自己去控制对象的使用周期,由于Jvm自带垃圾...
  • java引用传递和值传递的问题 1、首先明确一下值传递和引用传递的概念:  值传递:表示方法接收的是调用者提供的值。  引用传递:表示方法接收的是调用者提供的变量地址。 在Java中,变量分为以下两类: ①...
  • java引用传递 错误理解:把当前的引用传递过去,当前的引用与调用方得到的引用是同一个。 正确理解:引用传递只是把当前的引用复制一份传递到调用方,是两个引用,只是指向的地址是同一个。 ...
  • Java 引用传递导致的恶意代码漏洞

    千次阅读 2018-04-17 16:23:59
    Java 引用传递导致的恶意代码漏洞 代码 // 赋值操作只是传递引用,多建立一个引用的关联关系 // private List<String> list; 只是创建一个指向null的引用,并没有创建一个空的List对象 // list...
  • JAVA引用传递问题

    2013-03-29 10:50:06
    昨天面试java的时候,考官出了个java引用传递的问题,当时题目中有个List,我一时拿不准打错了,后来我回头试了一下得出了结果。 如题: import java.util.ArrayList; import java.util.List; public class ...
  • Java引用传递问题

    千次阅读 2018-10-12 23:45:46
    之前写了个关于Java值传递和引用传递的博客,自以为在函数参数传递这方面已经了解得比较清楚了。可是今天在做剑指offer算法题二叉搜索树和双向链表时,提交了好几次代码都没对,最后发现是函数参数传递理解出了问题...
  • 简单一点,引用传递和值传递的区别:值传递是传递了原有对象的一个副本,所以调用函数可以改变副本的值,但是对原有对象没有任何影响 引用传递是传递了对象的引用,对引用的操作会改变源对象本身 测试类: ...
  • Java引用传递&值传递

    2013-08-07 14:42:40
    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?   答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被...
  • java 引用传递小问题

    2016-12-27 17:31:06
    (2)引用传递: 其实这两者区别很简单: 在Java中  基本类型和基本的类型变量被当做参数传递给方法时,叫做值传递。在方法实体中,不会改变传递前的变量值(实质是传的对象值的拷贝),所以例子一中两次Print的值...
  • 问题来源于一道广泛的面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回...根据Horstmann的《Java核心技术》(中文第8版P115-P117)的描述,java中是没有引用传递的,原文摘录如
  • java 引用传递三种类型

    千次阅读 2018-09-29 20:52:17
    我这里使用了mldn视频里...对于三种引用传递的理解: 第一种和第三种都好理解:其实就是c语言那样传递的是地址,当然能够修改属性值,对于第二种其实就是因为String类比较特殊,在第二个例子中fun()函数str2="m...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,320
精华内容 4,928
关键字:

java引用传递

java 订阅