Java中对象为null和调用对象清除方法clear()的不同

简介: Java中对象为null和调用对象清除方法clear()的不同

痛苦了好多天的问题,以为是自己对框架的不熟悉导致在调用某各类的参数时,出现异常现象。解决的方法从《Thinking in Java 》第四版第2章一切都是对象、第5章初始化与清理中获得,综合了Stack Overflow上的一些观点。


在编程的过程中,会经历这样一种情形:在方法的结尾将对象赋值为null和清空集合的操作。其实这对于垃圾回收器来说没有意义。垃圾回收器对于方法内部的变量的回收很容易执行。


1,Java中new 出来的对象,也叫对该对象的引用,JVM(Java 虚拟机)垃圾回收机制会根据其寿命决定何时回收该对象。很多时候不需要自己去清除。

切记:Java中的对象被不总是被垃圾回收器回收,即


  • 对象可能不会被垃圾回收;
  • 垃圾回收并不等于“析构”(C++)中;
  • 垃圾回收只与内存有关。


2,在多线程中,尽量将类的全局变量转换为为局部变量,或者在方法和循环内部定义,再者取决于变量作用域,垃圾回收器更容易决定其是否应该被回收。


3,将对象的值赋值为null,相当于把对象的引用清除掉,即把引用对象的指针kill掉,再使用集合就会报空指针异常;调用集合的clear()方法,是把集合内部的对象都清空,而集合的引用还存在。


4,将集合作为参数传递到方法中,相当于把集合的引用传递到方法中,在方法中执行任何和集合相关的清除操作,相当于对集合执行清除操作。【上述解决方法解决不了问题,尝试此方法】


相关文章
|
11月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
1182 157
|
11月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
621 18
|
12月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
310 11
|
11月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
428 4
|
11月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
574 5
|
12月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
733 0
|
Java
JAVA方法的定义
JAVA方法的定义
373 0
|
存储 JSON Java
《从头开始学java,一天一个知识点》之:方法定义与参数传递机制
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 🚀 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。上篇:《输入与输出:Scanner与System类》 | 下篇剧透:《方法重载与可变参数》。
473 25

热门文章

最新文章