zoukankan      html  css  js  c++  java
  • Java——参数传递

     写这篇文章时,其实还是不理解Java中的参数传递只有传值没有传址(传引用)。这里引用知乎上大神的讲解来记录一下。

    一、基本类型和引用类型

    1 int num = 10;
    2 String str = "hello";

                     

    num是基本类型,num的值直接保存在变量中,变量保存在哪里呢?

    str是引用类型,变量中保存的是实际对象的地址,这种变量为“引用”,引用指向实际对象,实际对象中保存着内容。

    二、赋值运算符(=)

    1 num = 20;
    2 str = "java";

                        

    赋值操作有两个含义:

    1)放弃原有的值或引用

    2)得到=右侧变量的值或者引用

     基本类型num,赋值运算符会直接改变变量的值,原值被覆盖

    引用类型str,赋值运算符会改变引用中保存的地址,原来的地址被覆盖掉,但是原来的对象不会被改变。比如,"hello"字符串对象没有被改变,如果没有被任何引用指向,该字符串对象就会被视为垃圾,就会被垃圾回收器回收。

    三、调用方法的过程

    参数传递基本上就是赋值操作

    1基本类型:

    1 void foo(int value)
    2 {
    3          value = 100;
    4 }
    5 foo(num);//num没有被改变

    2未提供改变自身方法的引用类型:

    1 void foo(String text)
    2 {
    3        text = "windows";
    4 }
    5 foo(str); //str也没有被改变

    3提供了改变自身方法的引用类型

    1 StringBuilder sb = new StringBuilder("iphone");
    2 void foo(StringBuilder builder)
    3 {
    4       builder.append("4");
    5 }
    6 foo(sb); //sb被改变了,变成了“iphone4”

    4提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符

    1 StringBuilder sb = new StringBuilder("iphone");
    2 void foo(StringBuilder builder)
    3 {
    4      builder = new StringBuilder("ipad");
    5 }
    6 foo(sb);//sb没有被改变,还是"iphone"

    3 4示例理解:

    3图解:

    4图解:

    测试示例:

     1 class Employee
     2 {
     3     public int age;
     4 }
     5 public class Main
     6 {
     7     public static void changeEmployee(Employee employeeY)
     8     {
     9 //        employeeY = new Employee();
    10         employeeY.age = 1000;
    11     }
    12     public static  void main(String[] args)
    13     {
    14         Employee employee = new Employee();
    15         employee.age = 100;
    16         System.out.println(employee.age);
    17         changeEmployee(employee);
    18         System.out.println(employee.age);
    19     }
    20 }

    如果不注释第9行的代码,输出为:

    100

    100

    也就是employ的age并没有改变,这是为什么呢?

    注释掉第9行代码,输出就是:

    100

    1000

    这时候employee的age是改变了的,为什么呢?

    疑问待求证!!

    https://www.zhihu.com/question/31203609

  • 相关阅读:
    UDP:用户数据报协议(User Datagram Protocol)
    线程池的使用
    SQL Server表和模式空间使用情况http://www.51myit.com/thread2466911.html
    bytetobmp and bmptobyte(Image)
    c# TCP例子转载
    POJ 4047Garden
    NYOJ 102 次方求模
    Sum
    POJ 1094 Sorting It All Out(经典拓扑,唯一排序)
    POJ 2387 Til the Cows Come Home(Dijkstra)
  • 原文地址:https://www.cnblogs.com/bolumiere/p/6610338.html
Copyright © 2011-2022 走看看