首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java中,方法参数是基本类型和引用类型的区别

方法参数是基本类型时,传递的是值。 ...方法参数是引用类型时,传递的是内存地址值 当参数是基本类型时,在调用方法时将值传递到方法中,运行方法,运行结束方法退出,对原本main中定义的变量没有任何操作(方法中没有return)。...当参数是引用类型时,比如:定义数组时,在堆内存中存储了数组的数据,返回这组数据的地址给了数组名,然后在调用方法时,传递的也是这个地址。...也就是说 ,当形式参数是基本类型时,方法传的只是值,实际上main 里的实际参数和外部方法里的形式参数是不同的两个东西,如果方法不返回值,change里不管怎么改变,与main无关。...而当形式参数是引用类型时,比如:形式参数是数组时,两个方法通过同一个地址,使用的是同一个堆内存里的数组,是同一个东西,所以外部方法里面改变了这个数组之后,main再调用也是改变之后的数组。

1.5K20

java中finalized的用法_java中的引用类型

,JVM会创建一个java.lang.ref.Finalizer对象,这个Finalizer对象会持有这个对象的引用,由于这些对象被Finilizer对象引用了,当对象数量较多时,就会导致Eden区空间满了...类里也有一个引用队列,这个引用队列是JVM和垃圾回收器打交道的唯一途径,当垃圾回收器需要回收该对象时,会把该对象放到引用队列中,这样java.lang.ref.Finalizer类就可以从队列中取出该对象...,执行对象的finalize方法,并清除和该对象的引用关系.需要注意的是只有finalize方法实现不为空时JVM才会执行上述操作,JVM在类的加载过程中会标记该类是否为finalize类....java.lang.ref.Finalizer.ReferenceQueue队列中取对象,当一个对象进入到队列中,finalizer线程就执行对象的finalize方法并且把对象从队列中删除,因此在下一次...histo:live 8700|head -n 10命令强制触发一次GC,结果和前面的分析一致,Finalizer对象都放到引用队列中,并依次调用了对象的finalize方法,内存中java.lang.ref.Finalizer

2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Java】Java中的引用类型(全面解读)

    在Java编程中,理解引用类型是至关重要的。引用类型不仅仅是指向对象的指针,而且还涉及到Java内存管理的方方面面。...本文将深入探讨Java中的引用类型,包括它们的种类、用法以及与内存管理相关的注意事项。 什么是引用类型? 在Java中,引用类型是指一种变量类型,它们用于引用对象而不是存储实际的数据值。...引用类型的种类 在Java中,引用类型主要分为四种: 强引用(Strong Reference):强引用是最常见的引用类型,它指向对象并阻止垃圾回收器对该对象进行回收。...在设计数据结构时,应特别注意避免出现循环引用。 结语 在Java编程中,理解引用类型是编写高质量代码的关键。通过合理使用不同类型的引用,可以更好地管理内存,避免内存泄漏和内存溢出等问题。...同时,对于不同类型引用的特性和用法有深入的了解,能够更好地设计出高效、健壮的程序。 通过本文的介绍,相信读者对Java中的引用类型有了更清晰的认识,并能够在实际开发中更加灵活地运用引用类型来管理内存。

    40510

    你知道Java的四种引用类型吗?

    在这四个引用类型中,只有强引用FinalReference类是包内可见,其他三种引用类型均为public,可以在应用程序中直接使用。引用类型的类结构如图所示。 ? ?...02 强引用 Java中的引用,类似C语言中最难的指针。(我是C语言入门编程,指针的概念还是很深入我心。)通过引用,可以对堆中的对象进行操作。...03 软引用 软引用是除了强引用外,最强的引用类型。可以通过java.lang.ref.SoftReference使用软引用。...一旦垃圾线程回收该Java对象之后,get()方法将返回null。 下面举一个例子说明软引用的使用方法。 在你的IDE设置参数 -Xmx2m -Xms2m规定堆内存大小为2m。...关于Java的四种引用类型与应用例子就介绍到这里,觉得不错,底部打赏!

    89530

    java中的引用类型:强软弱虚

    java中的引用类型:强软弱虚java中的引用类型共4种:强软弱虚,具体每种类型的特点和应用场景。记录下。本文是看了马士兵老师的视频后记录整理的。加深印象。基本概念1....当内存空间不足时,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。...应用场景:软引用时候做缓存3. 弱引用弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。...在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存代码示例public class Weak { public static...当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

    17900

    Java中的四种引用类型

    概述 Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Java垃圾回收器密切相关的引用类。...引用类型对比 序号 引用类型 取得目标对象方式 垃圾回收条件 是否可能内存泄漏 1 强引用 直接调用 不回收 可能 2 软引用 通过 get()方法 视内存情况回收 不可能 3 弱引用 通过 get()...软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。...弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。...demo例子就不在这列出了 请百度或这点击这里java 引用类型实例DEMO ** 这里有JDK中常用包中类的demo示例(我多年的总结,呵呵) https://git.oschina.net

    750120

    Java中的四种引用类型

    强引用 强引用是最常用的引用类型,如下所示,new Object()会创建一个Object对象并存储在堆上,变量object存储对该对象的强引用。...弱引用 弱引用是使用WeakReference创建的,在垃圾回收线程执行过程中,只要找到了弱引用,不管内存空间是否足够,弱引用对象都将被回收。...虚引用 虚引用是使用PhantomReference创建的,它是所以引用类型中最弱的。虚引用对象和没有引用的对象相同,可以在任何时候被垃圾回收,并且虚引用必须要与引用队列一起使用。...当垃圾回收线程回收一个虚引用对象时,它将在垃圾回收后销毁该对象,并将PhantomReference添加到引用队列中。...@76fb509a */ 用途:虚引用可以用于精确的检测对象何时从内存中删除,通过检查引用队列来判断对象是否已经被回收。

    39030

    Java中的软引用,你了解吗?

    为了防止内存泄漏和程序的性能问题,Java中对于对象的垃圾回收进行了优化和改进。其中,软引用就是垃圾回收的一种方式。...本文将介绍Java中的软引用,其基本概念以及如何在实际应用中使用软引用摘要本文将深入探讨Java中的软引用,包括其定义和使用。我们将介绍如何使用软引用来避免内存泄漏和优化程序性能。...可以通过改变 JVM 参数来观察软引用对象的回收情况。...SoftReference 是 JVM 提供的一种基本的引用类型,在内存充足时表现和普通强引用一样,但在内存不足时,会被 GC 回收,避免 OutOfMemoryError 异常。...因为字符串对象被缓存后,只有缓存对象持有其软引用,当内存不足时,垃圾回收器会根据对象的引用类型及其占用内存的大小来进行垃圾回收。

    34461

    Java 中的四种引用类型

    Java以便我们控制对象的生存周期,提供给了我们四种引用方式,引用强度从强到弱分别为:强引用、软引用、弱引用、虚引用。 二、简介 1....任何通过强引用所使用的对象不管系统资源有多紧张,Java GC都不会主动回收具有强引用的对象。...所以单独使用虚引用时,没有什么意义,需要和引用队列ReferenceQueue类联合使用。当执行Java GC时如果一个对象只有虚引用,就会把这个对象加入到与之关联的ReferenceQueue中。...img 三、小结 强引用是 Java 的默认引用形式,使用时不需要显示定义,是我们平时最常使用到的引用方式。不管系统资源有多紧张,Java GC都不会主动回收具有强引用的对象。...虚引用的get()方法获取的永远是null,无法获取对象实例。Java GC会把虚引用的对象放到引用队列里面。可用来在对象被回收时做额外的一些资源清理或事物回滚等处理。

    44410

    java中的参数传递-值传递、引用传递

    在 Java 应用程序中永远不会传递对象,而只传递对象引用。因此是按引用传递对象。Java 应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数。...参数可以是对象引用,而 Java 应用程序是按值传递对象引用的。 Java 应用程序中的变量可以为以下两种类型之一:引用类型或基本类型。当作为参数传递给一个方法时,处理这两种类型的方式是相同的。...两种类型都是按值传递的;没有一种按引用传递。 按值传递和按引用传递。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。...按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。...这里有一点要澄清的是,这里的传对象其实也是传值,因为对象就是一个指针,这个赋值是指针之间的赋值,因此在java中就将它说成了传引用。(引用是什么?不就是地址吗?

    4.7K20

    你真的懂 Java 的内存管理和引用类型吗?

    本文将会对 Java 的内存管理以及四种引用类型,做一个总结。 一、Java 内存管理 ---- Java 内存管理就是对象的分配和释放问题。...栈区:当方法被执行时,方法体内的局部变量(包括基础数据类型、对象的引用)都在栈上创建,并在方法执行结束时。这些局部变量所持有的内存将会自动被释放。...结论: 局部变量的基本数据类型和引用存储于栈中,引用的对象实体存储在堆中 —— 因为他们属于方法中的变量,生命周期随方法而结束 成员变量全部存储于堆中(包括基本数据类型,引用和引用的对象实体)—— 因为它们属于类...在 Java 语言中,可作为 GC Roots 的对象包括下面几种: 虚拟机栈(栈帧中的本地变量表)中引用的对象 方法区中类静态属性引用的对象 方法区中常量引用的对象 本地方法栈中 JNI(即一般说的...二、Java 的引用类型 ---- 在 JDK 1.2 以前,Java 中引用的定义很传统:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。

    71320

    Java中四种引用类型:强引用,软引用,弱引用,虚引用

    四种引用类型 强引用(StrongReference) 软引用(SoftReference) 弱引用(WeakReference) 虚引用 (PhantomReference) 强引用 类似Object...obj = new Object()这类似的引用,强引用在程序代码中普遍存在,只要强引用在,垃圾搜集器永远不会搜集被引用的对象。...也就是说,宁愿出现内存溢出(OutOfMemoryError),也不会回收这些对象 在IDEA中EditConfigiratons中设置参数:-Xms20m 设置堆内存大小为20M 执行如下代码: package...对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象 在IDEA中EditConfigiratons中设置参数:-Xmx20M -XX:+PrintGCDetails 执行如下代码: package...才会回收该对象 弱引用 弱引用也是用来描述非必需对象的,用java.lang.ref.WeakReference类来表示,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。

    88430

    java中定义常量_形参可以是表达式吗

    大家好,又见面了,我是你们的朋友全栈君。 如 here所述,javac和其他Java编译器可能为条件为 “Constant Expression”的if语句提供代码消除功能....如果我的代码使用依赖于不同包中定义的其他常量表达式的常量表达式,那么这将如何影响?...而如果Foo和Bar实际上在同一个软件包中,则真正的分支应该绝对被消除(如果编译器完全支持代码消除)....不太确定如何最好地说出这个问题,但是:Foo如何“接近”需要在Bar中持续表达,以便在Bar中被认为是不变的?他们需要在同一个文件中吗?同样的包装?同一个jar文件?...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    57620

    Java 8中的Optional 类型与 Kotlin 中的可空类型Java 8中的Optional 类型与 Kotlin 中的可空类型Kotlin 中的可空类型《Kotlin极简教程》正式上架:

    Java 8中的Optional 类型与 Kotlin 中的可空类型 在 Java 8中,我们可以使用 Optional 类型来表达可空的类型。...- 允许传递为 null 参数 * Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException * Optional b = Optional.of...toUpperCase(); Swift 也有类似的语法, 只作用在 Optional 的类型上。...Kotlin 中的可空类型 上面 Java 8的例子,用 Kotlin 来写就显得更加简单优雅了: package com.easy.kotlin fun main(args: Array<String...: 0 相比之下,还有什么理由继续用 Java 8 的 Optional 呢? Kotlin 中的明星符号 ?????????????????????????????????????? ?: ?: ?

    2.6K10

    JAVA基本数据类型、引用数据类型-参数传递详解

    1:基本类型的参数传值 对于基本数据类型,修改这个值并不会影响作为参数传进来的那个变量,因为你修改的是方法的局部变量,是一个副本。实参的精度级别应等于或低于形参的精度级别,否则报错。...10; int y=12; JB jb=new JB(); jb.f(x, y); System.out.printf("main方法中x...和y的值分别是:%d, %d\n", x, y); } } 结果: 参数x和y的值分别是:11, 13 main方法中x和y的值分别是:10, 12 2:引用类型的参数传值 引用类型包括类、数组以及后面将要学习的接口...当形参是引用类型时,实参传给形参的值是对象的引用。如果修改形参引用的对象,那么实参引用的对象也会发生同样的变化。...因为实参的引用拷贝给了形参,所以实参和形参引用同一个对象,对形参引用对象的修改就相当于对实参引用对象的修改。

    1.4K20

    如何理解java方法的传值和传引用的参数传递方式(基本数据类型和引用类型)

    大家好,又见面了,我是你们的朋友全栈君。...结论: 1)当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值 2)当使用引用数据类型作为方法的形参时,若在方法体中 修改形参指向的数据内容,则会对实参变量的数值产生影响,...因为形参变量和实参变量共享同一块堆区; 3)当使用引用数据类型作为方法的形参时,若在方法体中 修改形参变量的指向,此时不会对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区 例一:基本数据类型作为形参...return this.age; } public void setAge(int age) { this.age = age; } } 例二:引用类型...this.name[1]; } public void setName(String[] name) { this.name = name; } } 例三:引用类型

    1.8K30

    Java中如何使用引用数据类型中的类呢?

    --------------------------------------- Java中数据类型的分类:   基本数据类型:4类8种。...注意:字符串、Lambda这两种引用数据类型后面会学习到。 --------------------------------------- Java中如何使用引用数据类型中的类呢?...在Java 9 或者更早版本中,除了8种基本数据类型,其他数据类型都属于引用数据类型。...如果希望使用引用类型中的“类”,那么典型用法的一般步骤为: 例如:使用Java中JDK已经写好的扫描器类 Scanner。 步骤1:导包。     指定需要使用的目标在什么位置。...在public class之前的一行写代码:  import xxx.yyy.zzz.类名; 例如:       import java.util.Scanner;   //这种方式导入的是:

    3.3K10

    辨析Java方法参数中的值传递和引用传递

    小方法大门道 小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递到方法中去,进行逻辑处理,方法执行完毕之后,再对修改过的变量进行判断处理,代码如下所示。...究其原因 在Java方法中参数列表有两种类型的参数,基本类型和引用类型。...引用数据类型:指针存放在局部变量表中,调用方法的时候,副本引用压栈,赋值仅改变副本的引用。但是如果通过操作副本引用的值,修改了引用地址的对象,此时方法以外的引用此地址对象当然被修改。...(两个引用,同一个地址,任何修改行为2个引用同时生效)。 这两种类型都是将外面的参数变量拷贝一份到局部变量中,基本类型为值拷贝,引用类型就是将引用地址拷贝一份。...结论:当方法参数为基本类型时,是将外部变量值拷贝到局部变量中而进行逻辑处理的,故方法是不能修改原基本变量的。

    1.5K10

    聊聊Java的引用类型(强引用、软引用、弱引用、虚引用),示例WeakHashMap的使用【享学Java】

    前言 Java语言中的数据类型可划分为值类型和引用类型。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。...而引用类型数据的变量值会存放在堆中,变量名(引用地址)会存放在栈中。 值类型的数据具有较快的存取速度 Java引用类型 在Java中提供了四个级别的引用:强引用,软引用,弱引用和虚引用。...这也侧面表示了:强引用类型是Java默认的引用类型,直接使用即可 这四个引用定义在java.lang.ref的包下 强引用 强引用( Final Reference):只要强引用还存在,垃圾收集器永远不会回收...软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。...里(更详细的可咨询JVM的对象回收流程)。

    1.3K30
    领券