• 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;
    }

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

  • 相关阅读:
    java基础高级
    Elasticsearch
    Nginx
    go语言基础
    elasticsearch启动失败
    redis基础
    数据结构(java版)
    mysql实现两个字段合并成一个字段查询
    StringBuffer 字符串截取从后往前,从前往后
    ERROR c.j.e.m.g.h.GatewayExceptionHandler [handle,52] [网关异常处理]请求路径
  • 原文地址:https://www.cnblogs.com/sdgtxuyong/p/6560542.html
Copyright © 2020-2023  润新知