zoukankan      html  css  js  c++  java
  • 4-2.值传递

               

    package property;
    public class ValueTest {
    
        private String field;
        
        public static void main(String[] args) {
            /*
             * 
             * -----------------方法参数-----------------
             * 
             * 按值调用:表示方法参数接受的是调用者提供的值
             * 按引用调用:................................................提供的变量地址
             * 
             * Java是值传递
             * 
             * 对象引用和值引用
             * 
             * 对象引用是按照值传递的
             * 
             */
    
            /*
             * 值引用
             * 
             * Java程序设计是按值引用,方法得到是所有参数值的一个拷贝,并不能修改传递给他的参数变量的内容
             * 
             * 执行步骤:
             * 1.x被初始化a的值的一个拷贝                         
             * 2.x*5 =10 ,a的值仍是2                                         
             * 3.方法结束后x变量不再使用
             */                   
    
            int a = 2;
            method1(a); 
            System.out.println("a=="+a);
            
            String b = "a";
            method2(b);
            System.out.println("b=="+b);
            
            String c = new String();
            c = "c";
            method2(c);
            System.out.println("c=="+c);
            
            /*
             * String类型不是基本数据类型为什么不能改变值:新开辟一块内存
       * String是final修饰的
       * 先拷贝x的一份对象变量为y,方法内给拷贝变量赋值,赋值操作是新开辟一片内存空间,引用赋值给y,x的引用并没有改变
             */
            String x = "5";
            method(x);
            System.out.println("x--->"+x);
            /*
             * 方法参数有两种类型:
             * 1.基本数据类型
             * 2.对象引用
             * 
             * 一个方法不能修改一个基本数据类型的参数,下面看对象引用
             */
            
            
           /*
            * 对象引用
            * 
            * 1.拷贝一份va的值赋给x,这是对象引用,指向同一个对象
            * 2.x.field="ss";
            * 3.结束后x不再使用,va继续指向原来的对象,值改变
            */
            
             ValueTest va =  new ValueTest();
             va.setField("aa");
             method3(va);
             System.out.println(va.getField());  
            
             /*
              * 1.分别拷贝一份对象变量赋值
              * 2.x,y指向对象交换,但是v1,v2没变
              * 3.结束后x,y不再使用了
              */
    
    
             ValueTest v1 = new ValueTest();
             v1.setField("v1");
             ValueTest v2 = new ValueTest();
             v2.setField("v2");
             method4(v1, v2);
             System.out.println(v1.getField()); 
             System.out.println(v2.getField()); 
             
        }
        
        private static void method(String y){
            y= "6";
        }
        
        private static void  method1(int x){
            x = 5*x;
            System.out.println("x=="+x);  
        }
    
        private static void  method2(String x){
            x = "aaa";
            System.out.println("x=="+x);  
        }
    
        private static void method3(ValueTest x){
            x.field = "ss";
            System.out.println(x.getField()); 
        }
        
        private static void method4(ValueTest x,ValueTest y){
            ValueTest temp = y;
            y = x;
            x = temp;
        }
        
        
        
        public String getField() {
            return field;
        }
    
        public void setField(String field) {
            this.field = field;
        }
        
    }
  • 相关阅读:
    数据库设计步骤 java程序员
    (1) 语法结构 java程序员
    (3)JavaScript学习笔记 函数、对象、数组 java程序员
    JavaScript 学习计划 java程序员
    (5)JavaScript学习笔记 变量 java程序员
    (2) 数据类型、值 及 字符串 java程序员
    (4)JavaScript学习笔记 数据类型和值(续) java程序员
    J2EE、J2SE、J2ME是什么意思? java程序员
    80端口(该端口是Tomcat的监听端口)已经被其他程序占用 java程序员
    (17) string 和 stringbuilder java程序员
  • 原文地址:https://www.cnblogs.com/lxh520/p/8134578.html
Copyright © 2011-2022 走看看