zoukankan      html  css  js  c++  java
  • java 对象

    实现一个改变对象参数状态的方法并不是一件难事。理由很简单,方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。

    很多程序语言提供了两种参数传递的方式:值调用和引用调用。有些程序员认为Java对对象采用的是引用调用,实际上,这种理解是不对的。

    总结一下Java语言中,方法参数的使用情况:

    1.一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)

    2.一个方法可以改变一个对象参数的状态

    3.一个方法不能实现让对象参数引用一个新的对象。

    public class ParamTest{
    
    /*
    *方法不能修改数值参数
    */
    
     public static void main(String[] args){
       System.out.println("Testing tripleVale:");
       double percent = 10;
       System.out.println("Before percent ="+percent );
       tripleVale(percent);
       System.out.println("After percent =" + percent );
     }
    
    /*
    *方法能改变参数状态
    */
      System.out.println("
    Testing tripleSalayr:");
      Employee harry = new Employee("Harry",5000);
      System.out.println("Before:salary=" + harry.getSalary);
      tripleSalary(harry);
      System.out.println("After:salary" + harry.getSalary);          
    
    /*
    *方法不能attach新的对象至原对象参数
    */
      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 tripleVale(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());
    }
    
    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 {
      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;
            salary+=raise;    
        }
        private String name;
        private double salary;
    }

    个人感觉,是因为没有使用方法的返回值,因为没有方法的返回值,所以调用后值没有变化,只是状态发生了变化。

  • 相关阅读:
    rosbag 那些事
    rosbag record and play
    xsens melodic ros driver
    ros the public key is not available
    pyhton2与pyhton3切换
    期待已久的2013年度最佳 jQuery 插件揭晓
    MVC学习资料
    依赖注入框架Autofac的简单使用
    bootstrap
    https://nodejstools.codeplex.com
  • 原文地址:https://www.cnblogs.com/sdgtxuyong/p/6560542.html
Copyright © 2011-2022 走看看