zoukankan      html  css  js  c++  java
  • java中值类型和引用类型的区别

    JAVA中值类型和引用类型的不同?

    [定义] 

    引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,

    那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法,

    当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。

    [值类型]

    也就是基本数据类型 基本数据类型常被称为四类八种

    四类:  

     1,整型 2,浮点型 3,字符型4,逻辑型

    八种:

    1,整型3种 byte,short,int,long

             2,浮点型2种 float,double

             3,字符型1种 char

             4,逻辑型1种 boolean

    [引用类型]

    除了四类八种基本类型外,所有的类型都称为引用类型(数组,类,接口,字符串)

    在弄清楚值类型与引用类型之后,最后一点就是值传递与引用传递,这才是关键

    [值传递]    

    基本数据类型赋值都属于值传递,值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形参的值,形参发生改变而不影响实参。

    [引用传递]

    引用类型之间赋值属于引用传递。引用传递传递的是对象的引用地址,也就是它的本身(自己最通俗的理解)。

    引用传递:传的是地址,就是将实参的地址传递给形参,形参改变了,实参当然被改变了,因为他们指向相同的地址。

    引用和我们的指针差不多,但是它不又不需要我们去具体的操作

     [内存分配]

    一个具有值类型(value type)的数据存放在栈内的一个变量中。即是在栈中分配内存空间,直接存储所包含的值,其值就代表数据本身。

    值类型的数据具有较快的存取速度。

    一个具有引用类型(reference type)的数据并不驻留在栈中,而是存储于堆中。即是在堆中分配内存空间,不直接存储所包含的值,而是指向所要存储的值,其值代表的是所指向的地址。当访问一个具有引用类型的数据时,需要到栈中检查变量的内容,该变量引用堆中的一个实际数据。引用类型的数据比值类型的数据具有更大的存储规模和较低的访问速度。

    Java中有垃圾回收机制,栈内存中的变量随着方法的结束内存自然销毁了,而用引用类型的时候,当方法结束的时候,这个对象可能被另一个引用类型所应用,不会销毁,只有当一个对象没有任何引用变量引用的时候,垃圾回收机制才会回收。

    package com.hanqi;
    
    public class Test17 {
    
        public static void main(String[] args) {
            
            
            //内存划分为栈内存(小)和堆内存(大)
            
            // 值类型
            int i=10;//保存在栈内存
            
            int m=i;//把值复制给m
            
            i=11;
            
            System.out.println("m="+m+"i="+i);
            
            //引用类型;除了基本数据类型,数组,String,类
            //实际内容存在堆,栈里只存对应到堆的地址
            
            int[] a= new int[]{1,2,3,4};
            int[] b=a;//把对应到堆的地址给了b
            
            a[2]=100;
            
            System.out.println("b[2]="+b[2]);
            
    
        }
    
    }

  • 相关阅读:
    使用Hibernate需要导入的一些JAR包
    Eclipse+MyEclipse+Tomcat的配置
    ant安装、环境变量配置及验证
    怎样关闭占用80端口的pid为4的进程
    查看80端口是否被占用
    python爬虫-抓取acg12动漫壁纸排行设置为桌面壁纸
    WPF--鼠标右键菜单中的Command命令实现
    WPF-TreeView获取文件夹目录、DataGrid获取目录下文件信息
    IOS学习[Swift中跳转与传值]
    IOS学习【xcode 7新特性url链接】
  • 原文地址:https://www.cnblogs.com/cycanfly/p/5230119.html
Copyright © 2011-2022 走看看