`
yxw22
  • 浏览: 26487 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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 中的垃圾回收机制]

       当一个堆内存中的对象没有被栈内存中表示地址的值“引用”时,这个对象就被称为垃圾对象,它无法被使用但却占据着内存中的区域,好比这样:

String s = new String(“person”); s = new String(“man”); s本来是指向堆内存中值为person的对象的,但是s突然讨厌person了,它指向了堆内存中的man对象了,person就像一个孤儿一样被s遗弃了,但是person比孤儿还要惨,因为没有什么能找的到它,除了位高权重的‘垃圾回收器’,不过被当官的找到往往没什么好事,尤其是这个‘垃圾回收器’,它会豪不留情把‘垃圾’们清理走,并且无情的销毁,以便释放内存。

[装箱与拆箱]

其实装箱就是值类型到引用类型的转化过程。将一个值类型变量装箱成一个引用类型变量,首先会在托管堆上为新的引用类型变量分配内存空间,然后将值类型变量拷贝到托管堆上新分配的对象内存中,最后返回新分配的对象内存地址。装箱操作是可逆的,所以还有拆箱操作。拆箱操作获取只想对象中包含值类型部分的指针,然后由程序员手动将其对应的值拷贝给值类型变量。

分享到:
评论

相关推荐

    抽象类与接口的区别-java中值类型和引用类型的区别.docx

    ### Java中值类型和引用类型的区别 #### 值类型 1. **存储位置**:值类型通常被分配在栈上。当声明一个值类型变量时,实际的值会被直接存放在该变量的内存空间中。 2. **实例化**:值类型变量直接包含了实例的数据...

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

    在Java编程语言中,值类型和引用类型是两种基本的数据类型分类,它们在内存管理和数据处理上有显著的差异。理解这些区别对于编写高效且无错误的代码至关重要。 **值类型**,也称为基本数据类型,包括四类共八种:...

    Java中值类型和引用类型的比较与问题解决

    Java中值类型和引用类型的比较与问题解决 Java 中的值类型和引用类型是两种不同的数据类型,它们在存储和比较时有着很大的区别。值类型是将值直接存储在变量中,而引用类型是将内存地址存储在变量中。 值类型 值...

    c#语言程序设计中值类型课件

    值类型是C#中的基本构建块,它们在内存中直接存储其值,而不是像引用类型那样存储对内存位置的引用。值类型包括整型(如int、byte)、浮点型(如float、double)、字符型(char)、布尔型(bool)以及结构(struct)...

    java 空指针异常(NullPointerException)

    Java中的空指针异常(NullPointerException)是编程过程中常见的错误类型,尤其对于新手开发者来说更为常见。这个异常通常在试图访问或操作一个值为null的对象引用时抛出。下面将详细探讨这一异常的原因、表现形式、...

    java与C#区别详细介绍1.docx

    - 字符串在Java和C#中都是不可变的引用类型,但在C#中,字符串可以使用字符串连接操作符,而在Java中则需要使用StringBuilder或StringBuffer来高效地拼接。 2. 面向对象特性: - C#支持接口和抽象类,两者都可以...

    Java当中的内存分配.pdf

    这个例子展示了Java中值传递的特点,即使对象的属性在方法内部被修改,原始对象的属性也会受到影响,这是因为传递的是对象引用的副本,而不是对象本身。这种行为与某些其他语言(如C++或C#)中的引用传递不同,后者...

    java 各公司面试题

    在第一个问题中,涉及到字符串变量`str`的作用域以及Java中值传递与引用传递的概念。Java中,基本数据类型是值传递,而对象(如字符串)则是引用传递。然而,由于字符串在Java中是不可变的,即使在方法中改变了`str`...

    Java软件开发实战 Java基础与案例开发详解 20-4 练习题 共4页.pdf

    - **数据的分类**:Java 中的数据类型分为基本数据类型和引用数据类型两大类。 - **标识符、关键字和常量**:这些是构成 Java 程序的基本元素。标识符用于命名变量、方法等;关键字是具有特殊含义的保留字;常量是在...

    2022年计算机二级考试JAVA预测练习试题.docx

    `java.lang` 包 这是所有Java程序自动导入的包,包含了基本的数据类型和一些核心类。 30. 为使以下代码正常运行,应当在下画线处填入的选项是(未提供具体代码,无法直接给出答案)。 这些题目主要测试了考生对...

    Java基础知识点总结

    - 引用数据类型:类、数组等。 8. **数据类型转换** - **默认转换**:从低精度向高精度自动转换。 - **强制转换**:需要显式地使用括号指定目标类型进行转换。 - **注意事项**:可能会导致数据精度丢失或溢出等...

    JAVA图形图象处理(论文+系统)【毕业论文】.zip

    1. **基本概念**:首先,论文可能会介绍图像的基本类型,如位图和矢量图,以及它们在Java中的表示。还会讲解像素、色彩模式(如RGB、CMYK)和图像格式(如JPEG、PNG)等基础知识。 2. **Java 2D API**:Java 2D API...

    数据分析师培训课程中老师传授的亲身经验.docx

    - Java 中的基本数据类型包括整型、浮点型、布尔型和字符型,而引用类型包括数组、集合和自定义类型等。 在实际的数据分析师培训中,这些基础知识是不可或缺的,因为它们构成了理解和处理数据的基础。同时,理解并...

    详解Java对象的强、软、弱和虚引用+ReferenceQueue

    Java对象的强、软、弱和虚引用+ReferenceQueue Java对象的强、软、弱和虚引用是Java语言中的一种机制,用于控制对象的生命周期和...通过选择合适的引用类型,可以实现不同的内存管理策略,提高程序的性能和稳定性。

    Python中 传递值 和 传递引用 的区别解析

    Python中的参数传递机制与一些其他语言(如C++或Java)中的机制不同,这导致了在传递变量时可能产生一些误解。 首先,我们来解释一下什么是值传递和引用传递。在值传递中,函数接收的是原始数据的一个副本,对这个...

    Java变量常量声明和定义原理解析

    Java变量类型可以分为两类:基本类型和引用类型。基本类型包括整数类型、浮点数类型、字符类型、布尔类型等。引用类型包括数组、类、接口等。 四、变量作用域 变量作用域是指变量可以被访问的范围。Java变量可以...

    Java基础笔记-基础部分

    - 引用类型:如数组、类对象等。 - **基本类型详解**: - **字符和字符串**: - **字符**:单个可输出的符号,如`'a'`。在Java中,字符是基本数据类型。 - **字符串**:双引号括起来的一系列字符,如`"hello"`...

Global site tag (gtag.js) - Google Analytics