美文网首页Automation Software Apartment
Java学习笔记01-传值or传引用

Java学习笔记01-传值or传引用

作者: 1Z实验室阿凯 | 来源:发表于2015-11-14 11:17 被阅读81次

突然发现Java在传值和引用部分上,借助C语言里面的指针(底层内存分配)可以很容易理解,或者者说这些难点都是C语言的遗留问题和Java无关

Note:关于传值与传引用的定义可参考下方链接

Java 方法的参数是按什么传递的问题,其答案就只能是:即是按值传递也是按引用传递,只是参照物不同,结果也就不同 Java传值与引用

直接上代码

/*
*This Program demonstrate parameter passing in java
*@Version 1.00 
*@Author Scorpion
*/

public class ParamTest{
    public static void main(String[] args){
        /**
        *Test1: Methods can't modified numeric parameters
        */
        System.out.println("TestTrip Value...");
        double percent = 10;
        System.out.println("Before: percent="+percent);
        tripleValue(percent);
        System.out.println("After: percent="+percent);

        /**
        *Test2: Method can change the state of object parameters
        */
        System.out.println("\nTesting tripleValue:");
        Employee harry = new Employee("Harry",5000);
        System.out.println("Before: salary = "+harry.getSalary());
        tripleSalary(harry);
        System.out.println("After: salary = "+harry.getSalary());

        /**
        *Test3: Methods can't attach new objects to object parameter
        */
        System.out.println("Testing 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());
    }

    public static void tripleValue(double x){
        x = 3 * x;
        System.out.println("End of Method:x="+x);
    }

    public static void tripleSalary(Employee x){
        x.raiseSalary(200);
        System.out.println("End of Method x = "+x.getSalary());
    }
    /**
    *Note: just like pointer
    */
    public 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());
    }
}

class Employee{//simplified Employee class
    private String name;
    private double salary;

    public Employee(String n,double s)
    {
        name = n;
        salary = s;
    }

    public String getName()
    {
        return name;
    }

    public double getSalary()
    {
        return salary;
    }

    public void raiseSalary(double byPercent)
    {
        double raise = salary * byPercent / 100;
        salary += raise;
    }
}

OUTPUT

TestTrip Value...
Before: percent=10.0
End of Method:x=30.0
After: percent=10.0
Testing tripleValue:
Before: salary = 5000.0
End of Method x = 15000.0
After: salary = 15000.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

对应C语言片段片段

Part1: tripleValue

void tripleValue(int a,int b)
{
  int tmp;
  tmp = a;
  a = b;
  b = tmp;
}

void main()
{
  int a = 10;
  int b = 9;
  tripleValue(a,b);
}

Part2:tripleSalary

void tripleSalary(int * salary)
{
   *salary +=2000;
}

void main()
{
  int salary = 5000;
  int* p = &salary;
  tripleSalary(p);
}

Part3:Swap

void swap(int* a,int* b)
{
  int* tmp = null;
  tmp = a;
  a = b;
  b = tmp;
}

void main()
{
  int a = 9;
  int b = 10;
  int *pa = &a;
  int *pb = &b;

  swap(pa,pb);
}

相关文章

  • Java学习笔记01-传值or传引用

    突然发现Java在传值和引用部分上,借助C语言里面的指针(底层内存分配)可以很容易理解,或者者说这些难点都是C语言...

  • java调用方法传递机制

    java是传值,不是传引用,有人说有的人说:基础类型传值,对象类型传引用。其实对象类也是传值,只不过对象的值恰好是...

  • JavaSE基础面试题

    1、Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。 ...

  • 视图传值和引用静态文件_Django学习笔记(二)-python

    视图传值和引用静态文件_Django学习笔记(二)-python3 引入js文件 如图: c. 视图传值 -1....

  • 一张图解决java传值传引用问题

    分析此类问题只需要知道两点:java有两种传参方式,基本类型用传值,包装类型用传引用无论是传值还是传引用,形参都是...

  • 一张图解决java传值传引用问题

    分析此类问题只需要知道两点:java有两种传参方式,基本类型用传值,包装类型用传引用无论是传值还是传引用,形参都是...

  • 形参与实参的区别

    形参与实参详解 总结:    1.java的基本数据类型是传值调用,对象引用类型是传引用。    2.当传值调用时...

  • JavaScript学习 之 传值or传引用

    目录 引言 传值? 传引用? 基础类型传值-对象类型传引用? 传共享! 小结 引言 JavaScript的函数参数...

  • Java中的基本类型与引用类型

    定义 在函数传值时,对于基本类型变量,Java是传值的副本;对于所有的引用类型变量,如String等,Java都是...

  • Java传值与传引用

    定义 传值 传递的是值的副本。方法中对副本的修改,不会影响到调用方 传引用: 传递的是引用的副本,共用一个内存,会...

网友评论

    本文标题:Java学习笔记01-传值or传引用

    本文链接:https://www.haomeiwen.com/subject/nwhkhttx.html