JAVA中值类型和引用类型的区别

 更新时间:2017年02月23日 17:04:40   作者:cainiao123hack  
在java开发中经常会遇到值类型和引用类型知识,但是有很多朋友不清楚java中值类型和引用类型的区别,今天小编通过本文给大家介绍下

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

2,为什么Java中数据的存放有堆和栈之分?

以上所述是小编给大家介绍的JAVA中值类型和引用类型的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java连接Redis全过程讲解

    Java连接Redis全过程讲解

    这篇文章主要介绍了Java连接Redis全过程讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • springboot中如何指定某些接口不被拦截

    springboot中如何指定某些接口不被拦截

    这篇文章主要为大家详细介绍了springboot中如何指定某些接口不被拦截,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • mybatis 查询返回Map<String,Object>类型

    mybatis 查询返回Map<String,Object>类型

    本文主要介绍了mybatis 查询返回Map<String,Object>类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • SpringCloud集成Nacos的使用小结

    SpringCloud集成Nacos的使用小结

    这篇文章主要介绍了SpringCloud集成Nacos的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Spring Security异步无法获取用户认证信息的解决方法

    Spring Security异步无法获取用户认证信息的解决方法

    最近使用 Springboot 中 @Async 注解异步调用方法时,发现无法获取到用户认证信息,本文小编给大家介绍了Spring Security异步无法获取用户认证信息的原因和解决方法,并通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • MyBatisPlus 自定义sql语句的实现

    MyBatisPlus 自定义sql语句的实现

    这篇文章主要介绍了MyBatisPlus 自定义sql语句的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 浅谈springMVC拦截器和过滤器总结

    浅谈springMVC拦截器和过滤器总结

    本篇文章主要介绍了springMVC拦截器和过滤器总结,可以用来对访问的url进行拦截处理,有兴趣的可以了解一下。
    2017-01-01
  • Spring Boot集成sa-token的项目实践

    Spring Boot集成sa-token的项目实践

    本文主要介绍了Spring Boot集成sa-token的项目实践,实现了基本的登录和权限控制功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • SpringBoot 全局线程池配置及应用小结

    SpringBoot 全局线程池配置及应用小结

    为了提高应用程序的性能和响应速度,线程池是一个非常重要的工具,本文主要介绍了Spring Boot 全局线程池配置及应用,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • FastJSON字段智能匹配踩坑的解决

    FastJSON字段智能匹配踩坑的解决

    这篇文章主要介绍了FastJSON字段智能匹配踩坑的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论