zoukankan      html  css  js  c++  java
  • 值传递和引用传递

    1)若想搞清楚java中的值传递和引用传递,首先要搞清楚java中两种数据类型:基本类型和引用类型。java中基本类型只有八种,如下所示:

    其余的都是引用类型(就是使用new运算符创建的对象类型),例如String,Integer、数组等。

    2)这两种类型的变量的存储位置也不同。基本类型是存储在栈上,属于线程局部的,只供本线程访问。而引用类型是存储在堆上,可以供进程的所有线程访问。从栈里面申请内存,简单快速,但是容量有限。堆是所有线程共有的,从堆里面申请内存要进行相关的加锁操作,因此申请堆内存的复杂度和时间开销比栈要大很多。

    3)这两种类型存储的值意义不同。基本类型变量存储的值就是变量的实际值(字面值,一个字符,数值或者布尔值),而引用类型存储的值是指向对象的地址值。

    int val;//基本类型声明时,即分配内存空间(存放数据)。
    val=10;
    Date date;//引用类型声明时,只是给引用类型变量date分配了内存空间。
    date=new Data();//使用new操作符创建对象实例时,才创建对象的内存空间。在这里,将对象内存空间的地址复制给date
    date2=date;//只是将对象地址赋给了date2,并没有复制对象。指向同一个对象

    总之,java中值传递方式就是值传递,只是基本类型变量传递的是字面值,而引用类型传递的是指向对象的地址值,归根到底都是值。

    4)以一个实例说明值传递和引用传递:

     1 public class TestMain {    
     2     public static void main(String[] args) {
     3         String a = "a";
     4         String b = "b";
     5         operator(a, b);    
     6         StringBuilder x = new StringBuilder("x"); 
     7         StringBuilder y = new StringBuilder("y");        
     8         System.out.println(a + "," + b);    
     9         System.out.println(x + "," + y);
    10     }
    11 
    12     public static void operator(String a, String b) {
    13         a += b;
    14         System.out.println("new a:"+a);
    15         b = a;
    16 
    17     }
    18 
    19     public static void operator(StringBuilder a, StringBuilder b) {
    20         a.append(b);
    21         b = a;
    22     }
    23 }

    结果如下:

    5)关于"=="和equals

    6)最后,总之,引用类型存储的是对象的地址

  • 相关阅读:
    jeesite导入导出
    jeesite下载
    百度echart
    js获取日期
    清除svn
    父子窗口
    JS高级程序设计之高级技巧
    JS中离线应用与客户端存储
    JS最佳实践
    JSON之JS高级程序设计笔记
  • 原文地址:https://www.cnblogs.com/lz3018/p/5063713.html
Copyright © 2011-2022 走看看