iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中常见的几个陷阱分别是什么
  • 779
分享到

Java中常见的几个陷阱分别是什么

2023-06-16 19:06:08 779人浏览 八月长安
摘要

这篇文章给大家介绍Java中常见的几个陷阱分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java 中有很多,新手经常遇到的陷阱,下面主要包含自动装箱与拆箱不可变的String内存泄漏自增类型使用使用 “==”

这篇文章给大家介绍Java中常见的几个陷阱分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

java 中有很多,新手经常遇到的陷阱,下面主要包含

  • 自动装箱与拆箱

  • 不可变的String

  • 内存泄漏

  • 自增类型使用

  • 使用 “==”进行对象比较

  • double 类型计算

不可变的String

Java  String类是不可变的(不可修改)。这是因为String对象被缓存在String池中。字符串引用的对象可以更改,但字符串对象本身不能更改。

Java中常见的几个陷阱分别是什么

字符串是不可变的。一旦创建了字符串,以后将无法更改该字符串对象。

Java使用按值传递,而不是按引用传递。当您在方法中为分配新值时,它只会修改本地,而不是调用代码中的原始s

Java中常见的几个陷阱分别是什么

自动装箱与拆箱

装箱就是自动将基本数据类型转换为包装器类型;

拆箱就是自动将包装器类型转换为基本数据类型。

装箱拆箱的类型有哪些?

Java中常见的几个陷阱分别是什么

通过上图,可以看出,java 基本类型可以进行拆装箱。

那拆装箱会出现什么问题呢?

Java中常见的几个陷阱分别是什么
Java中常见的几个陷阱分别是什么

通过实例,上面两个程序,计算耗时相差近10倍,在大量存在装箱行为时,会导致程序性能低下。

当封装类型进行==、+、-、*、/计算时,会自动拆箱,对基础数据类型进行运算.所以在进行计算时,使用基本数据类型。

内存泄漏

Java的核心优势之一是 Java垃圾收集器,它可以管理堆上的对象内存。每当对象不可访问时,它将自动释放。

但是,对于新手和有经验的程序员而言,常见的错误是通过允许不再使用的对象可访问来防止释放内存。这可能对项目造成很大的不利影响,因为内存泄漏会阻塞资源并降低应用程序性能。它甚至可能导致java.lang.OutOfMemoryError。

常见的情况是:

  • 静态字段声明。静态字段,并在不再需要其数据后忘记将其设置为null

  • 未正常关闭流。 Java虚拟机为每个打开的连接分配内存。忘记关闭连接会消耗内存。这样的连接可以是:输入流,数据库连接,会话等。

  • finalize()  方法。当我们覆盖的finalize()方法,finalize()只会在对象内存回收前被调用一次,具有不确定行,只保证方法会调用,但不保证方法里的任务会被执行完。所以尽量避免使用。在Java  9 中,已经声明为过期函数,

自增类型使用

Java中运算符的计算顺序是在同等级下从左到右计算,看下自增情况

Java中常见的几个陷阱分别是什么

第一种情况的执行上下文如下:

存储操作数的先前值。

增加值。

返回上一个值

第二种情况的执行上下文如下:

增加值。

存储操作数的值(递增)

返回值

使用 “==”进行对象比较

许多新手程序员尝试使用“ ==”运算符比较对象,并且当代码的行为不符合预期时,就会感到困惑。需要注意的是,关系运算符“  ==”正在进行引用比较,它检查两个对象是否都指向内存中的相同位置。使用 .equals()方法将消除此问题,因为它会比较对象内部的值。

Java中常见的几个陷阱分别是什么

尽管有时“ ==”运算符会给出预期的答案:

Java中常见的几个陷阱分别是什么

这是什么原因呢?同样是字符串,创建的方式不同,差距咋这么大呢

Java语言规范的字符串文字中:同一包中不同类内的文字字符串表示对同一String 对象的引用

如果还不清楚那看下两种字符串创建过程

第一种new的方式

new一个字符串时,做了两件事。首先在堆中生成了该字符串对象,然后去看常量池中有没有该字符串,如果有就不管了,没有就往常量池中添加一个

Java中常见的几个陷阱分别是什么

第二种,直接赋值

这样创建字符串,首先会去常量池里找有没有这个字符串,有就直接指向常量池的该字符串,没有就先往常量池中添加一个,再指向它。

Java中常见的几个陷阱分别是什么

上面就是两种方式的对比情况了。

Java中常见的几个陷阱分别是什么

两个Integer 对比

Java中常见的几个陷阱分别是什么

那为什么100的时候就是相等200就不行了呢这是由于Integer 使用了缓存。

Java中常见的几个陷阱分别是什么

其static块中就一次性生成了-128到127直接的Integer类型变量存储在cache[]中,对于-128到127之间的int类型,返回的都是同一个Integer类型对象。

整个工作过程就是:Integer.class在装载(Java虚拟机启动)时,其内部类型IntegerCache的static块即开始执行,实例化并暂存数值在-128到127之间的Integer类型对象。

当自动装箱int型值在-128到127之间时,即直接返回IntegerCache中暂存的Integer类型对象。

为什么Java这么设计?应该是出于效率考虑,因为自动装箱经常遇到,尤其是小数值的自动装箱;而如果每次自动装箱都触发new,在堆中分配内存,就太耗时了;

其它几种基本类型包装类,也进行了缓存

Java中常见的几个陷阱分别是什么

Double 类型计算

Java中常见的几个陷阱分别是什么

Java中的double和float在内部表示为二进制分数,因此在表示十进制分数时可能不够精确(IEEE标准754)。十进制数计算需要精度,需要使用java.math.BigDecimal

关于Java中常见的几个陷阱分别是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Java中常见的几个陷阱分别是什么

本文链接: https://www.lsjlt.com/news/284764.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中常见的几个陷阱分别是什么
    这篇文章给大家介绍Java中常见的几个陷阱分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java 中有很多,新手经常遇到的陷阱,下面主要包含自动装箱与拆箱不可变的String内存泄漏自增类型使用使用 “==”...
    99+
    2023-06-16
  • JavaScript中常见的八个陷阱是什么
    这篇文章给大家分享的是有关JavaScript中常见的八个陷阱是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 你是否尝试过对数组元素进行排序?JavaScript默认使...
    99+
    2024-04-02
  • Java 语法的陷阱:识别并避免常见错误
    简介 Java是一种语法简洁、功能强大的编程语言,但它也有一些容易误导开发人员的语法陷阱。忽视这些陷阱会导致代码错误、运行时异常甚至安全漏洞。为了避免这些问题,开发人员必须熟悉常见的语法陷阱并采取措施防止它们。 常見的語法陷阱 1. 拼寫...
    99+
    2024-04-03
    Java语法陷阱:识别并避免常见错误
  • Linux 和 Windows 系统中 Python 面试中最常见的陷阱是什么?
    Python 是一种高级编程语言,应用广泛,特别是在数据科学和人工智能领域。随着 Python 的流行,越来越多的人选择学习和使用 Python。当你准备面试 Python 时,你需要准备好回答一些基础问题。但是,有些问题可能会让你陷入困...
    99+
    2023-09-17
    linux windows 面试
  • 云中的数据管理,这七个常见陷阱要避免
      将应用与工作负载迁移到云将带来可伸缩性、低成本、易维护等等多方面的好处,但移动数据并不是没有风险。当IT系统或应用程序宕机时,企业所付出的代价将会很大。根据ITIC的调查,98%的组织宕机一个小时所造成的损失可能超过10万美元。  “到...
    99+
    2023-06-04
  • Vue.js中的性能陷阱是什么
    本篇内容介绍了“Vue.js中的性能陷阱是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!调查性能下降的...
    99+
    2024-04-02
  • Java 中 XML 处理的最佳实践:避免常见的陷阱
    在 Java 中处理 XML 时,了解最佳实践至关重要,以避免常见的陷阱并实现高效、可靠的 XML 处理。本文介绍了使用 JAXB、DOM 和 SAX 解析 XML 的最佳实践,有助于避免内存问题、安全漏洞和性能瓶颈。 使用 JAXB ...
    99+
    2024-03-07
    XML 解析、JAXB、DOM、SAX、最佳实践
  • JavaScript语法中12个需要绕开的陷阱分别是怎样的
    今天就跟大家聊聊有关JavaScript语法中12个需要绕开的陷阱分别是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。12种应该避免的Java...
    99+
    2024-04-02
  • Java编程语言常见缺陷是什么
    这篇文章主要讲解了“Java编程语言常见缺陷是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java编程语言常见缺陷是什么”吧!Java编程语言常见缺陷正如我已经展示过的,Java编程语...
    99+
    2023-06-17
  • Python 数据分析中的陷阱:避免常见错误的秘诀
    数据收集和准备 数据质量差:确保数据准确、完整且一致非常重要。对数据进行适当的清洗和变换以消除错误和异常值。 数据偏见:考虑数据的来源和收集方法。确保样本具有代表性,避免对结果产生偏见。 数据准备错误:将数据转换为不同的格式或结构时,要...
    99+
    2024-03-12
    数据分析的本质是将原始数据转化为有用的信息。Python 因其强大的数据处理库而成为数据分析的首选语言 但使用它时需要注意一些常见的陷阱。
  • Lambda 的陷阱与挑战:Java 函数式编程中的常见坑
    使用 Lambda 表达式时,如果在 Lambda 中捕获了外部变量,而该变量的生命周期比 Lambda 本身长,则可能会导致内存泄漏。这是因为 Lambda 会一直持有对该变量的引用,即使它不再需要该变量。 不可变性问题 Lambda ...
    99+
    2024-04-02
  • java中几种常见的排序算法是什么
    java中几种常见的排序算法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1 排序       排序,就是使一串记录,按照其中某个...
    99+
    2023-06-29
  • Java JAX-RS 中的常见错误:揭示并避免潜在的陷阱
    1. 忽略资源类的注解 在 JAX-RS 中,资源类需要使用 @Path 注解来指定其 URI 路径。如果没有此注解,框架将无法识别该类是一个资源类,导致无法访问其方法。 示例: @Path("/products") public cl...
    99+
    2024-02-28
    Java、JAX-RS、REST、Web 服务、错误陷阱
  • mysql中常见的几种约束是什么
    小编给大家分享一下mysql中常见的几种约束是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql中常见的几种约束有:1、主键;2、默认值;3、唯一;4、外键;5、非空。约束是一种限制...
    99+
    2024-04-02
  • JavaScript中五大常见函数分别是什么
    这篇文章主要为大家展示了“JavaScript中五大常见函数分别是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中五大常见函数分别是什么...
    99+
    2024-04-02
  • Nginx配置中FastCGI的几个命令分别是什么
    Nginx配置中FastCGI的几个命令分别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Nginx配置一直以来都在程序...
    99+
    2024-04-02
  • Java常见知识点中==和equals的区别是什么
    这篇文章将为大家详细讲解有关Java常见知识点中==和equals的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。== 是一个运算符。 equals则是string对象的方法。ja...
    99+
    2023-06-05
  • java中实现分页的常见几种方式
    文章目录 1. 前言2. 先说结论3. 例子1. 数据库SQL的限制条件(limit、fetch)2. 使用List集合的截取功能实现3. 插件PageHelper 1. 前言 无论是...
    99+
    2023-08-31
    mybatis java 分页 数据库 PageHelper
  • WCF中几个基本知识点分别是什么
    本篇文章给大家分享的是有关WCF中几个基本知识点分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。整理了几个WCF里几个基本知识点:1、WCF中的MessageWCF中的...
    99+
    2023-06-17
  • ApacheSpark常见的三大误解分别是什么
    ApacheSpark常见的三大误解分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。ApacheSpark常见的三大误解误解一:Spark是一种内存技术  大家对S...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作