• java基础面向对象之引用传递


    java基础面向对象之引用传递

    2017-02-15

    引用传递的核心意义:

        同一块堆内存空间可以被不同的栈内存所指向,不同栈内存可以对同一堆内存进行内容的修改。

    引用传递例1:

      

     1 class Nummer{
     2     private int num = 10 ;    //设置num的值
     3     public Nummer (int num){    //构造函数初始化num变量
     4         this.num = num ;
     5     }
     6     public void setNum(int num){
     7         this.num = num ;
     8     }
     9     public int getNum(){
    10         return this.num ;
    11     }
    12 }
    13 public class Demo1 {
    14     public static void main(String[] args) {
    15         Nummer n = new Nummer(30) ;
    16         /**
    17          * 声明并实例化Nummer类的对象
    18          * 并且传递一个值30,修改原始值
    19          */
    20         fun(n) ;    //调用fun()方法,传入Nummer类的对象 
    21         System.out.println(n.getNum());
    22     }
    23     public static void fun(Nummer temp){
    24         temp.setNum(100) ;        //修改值30,变为100
    25     }
    26 }

    内存分析图:

      

    引用传递例2:

     1 public class Demo2 {
     2     public static void main(String[] args) {
     3         String str = "hello" ;    //声明一个string 类 型 的字符串
     4         fun(str) ;    //调用fun() 方法
     5         System.out.println(str);    //打印输出str
     6     }    
     7     public static void fun(String st){
     8         st = "world" ;        //修改str原始的值
     9         /**
    10          *
    11          * 
    12          */
    13     }
    14 }

    误区:String类对象的内容一旦设置则不可改变,对象内容的改变依靠的是引用地址的改变。

    内存分析图:

    引用传递例3:

     1 class D{
     2     private String msg = "nihaoa" ;
     3     public D(String msg){
     4         this.msg = msg ;
     5     }
     6     public void setMsg(String msg){
     7         this.msg = msg ;
     8     }
     9     public String getMsg(){
    10         return this.msg ;
    11     }
    12 }
    13 public class Demo3 {
    14     public static void main(String[] args) {
    15         D d = new D("Hello") ;
    16         fun(d) ; 
    17         System.out.println(d.getMsg());
    18     }
    19     public static void fun(D d){
    20         d.setMsg("你好") ;
    21     }
    22 }

    内存分析图:

    结论:

    虽然String属于类,属于引用类型,但是由于其内容不可改变的特点很多的时候就直接把String当成基本类型,

    也就是说String变量只可以保存一个数据,如果改变了之前的数据就没了 

  • 相关阅读:
    Fragment传参
    android手机旋转方向识别
    如何激活已经运行过的Activity, 而不是重新启动新的Activity
    Android 在Canvas中实现画笔效果(一)--钢笔
    [AS3]as3画笔实例实现橡皮擦功能源代码
    在 Windows 環境下利用 VNC 遠端控管 Mac OS X Server
    mac下开发IOS代码管理
    Android开发--仿微信语音对讲录音
    Android 二维码 生成和识别(附Demo源码)
    Android开源项目分类汇总
  • 原文地址:https://www.cnblogs.com/zbj815/p/6402804.html
Copyright © 2020-2023  润新知