java陷阱常见面试题_Java常见陷阱

java陷阱常见面试题

总览

Java是一种极简主义的语言,具有比其他语言故意更少的功能,尽管如此,Java仍然具有产生奇怪效果的边缘情况,甚至具有令人惊讶的效果的一些常见情况也会使您轻而易举。 如果您习惯于阅读另一种语言,则可以轻松地以错误的方式阅读Java,而不会感到困惑。

变量仅是引用或原语

没错,变量不是对象。 这意味着当您看到以下内容时,s 不是一个对象 ,它不是一个String,它是对String的引用

String s = "Hello";

这回答了许多混乱的领域,例如;

  • 问:如果String是不可变的,该如何更改。 例如 s + =“!”;
  • 答:您不能使用普通Java,只能更改对String的引用。

==比较引用,而不是它们的内容。

更令人困惑的是,有时使用==是可行的。 如果您有两个相同的不可变值,则JVM也可以尝试使引用相同。 例如

String s1 = "Hi", s2 = "Hi";Integer a = 12, b = 12;

在这两种情况下,都使用对象池,因此引用最终是相同的。 s1 == s2和a == b都成立,因为JVM引用了同一对象。 但是,稍微改变一下代码,以便JVM不会合并对象,并且==返回false,这可能是意外的。 在这种情况下,您需要使用equals。

String s3 = new String(s1);Integer c = -222, d = -222;
s1 == s2      // is trues1 == s3      // is falses1.equals(s3) // is truea == b        // is truec == d        // is false (different objects were created)c.equals(d)   // is true

对于Integer,对象池从-128开始,至少为127(可能更高)

Java按值传递引用

所有变量都按值传递,甚至引用也是如此。 这意味着,当您拥有一个作为对对象的引用的变量时,将复制此引用,但不复制该对象。 例如

public static void addAWord(StringBuilder sb) {sb.append(" word");sb = null;
}
StringBuilder sb = new StringBuilder("first ");
addWord(sb);
addWord(sb);
System.out.println(sb); // prints "first word word"

引用的对象可以更改,但是对复制的引用的更改对调用者无效。

在大多数JVM中,Object.hashCode()与内存位置无关

hashCode()必须保持不变。 没有这个事实,像HashSet或ConcurrentHashMap这样的哈希集合将无法工作。 但是,对象可以位于内存中的任何位置,并且可以更改位置,而无需您的程序知道发生了这种情况。 使用该位置的hashCode无效(除非您有一个不移动对象的JVM)

对于OpenJDK和HotSpot JVM,hashCode()是按需生成的,并存储在对象的标头中。 使用Unsafe,您可以查看是否已设置hashCode(),甚至可以通过

Object.toString()做一些令人惊讶的事,而不是有用的事

toString()的默认行为是为类和hashCode()打印内部名称。

如前所述,hashCode不是存储位置,即使它以十六进制打印也是如此。 而且,类名,特别是对于数组,令人困惑。 例如; String []打印为[Ljava.lang.String; [表示它是一个数组,L表示它是一个“语言”创建的类,而不是像BTW这样具有代码B的字节之类的基元。 表示课程结束。 例如说你有一个像

String[] words = { "Hello", "World" };
System.out.println(words);

打印类似

[Ljava.lang.String;@45ee12a7

不幸的是,您必须知道该类是一个对象数组,例如,如果您只有对象字,那么您将遇到问题,并且必须知道调用Arrays.toString(words)。 这种中断封装的方式非常糟糕,并且在StackOverflow上经常造成混乱。

我曾问过Oracle公司的其他开发人员这件事,我的印象是现在很难修复它。

参考: Vanilla Java博客上来自我们JCG合作伙伴 Peter Lawrey的Java常见陷阱 。

翻译自: https://www.javacodegeeks.com/2014/03/common-gotchas-in-java.html

java陷阱常见面试题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/342803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】 广东开放大学21秋期末考试法律职业伦理10214k2

1、指导法律职业人员的最高原则是()。(2 分) A.清正廉洁,奉公守法 B.严明纪律,保守秘密 C.以事实为根据,以法律为准绳 D.互相尊重,互相…

LoRaWAN网络协议与LoRa私有协议相比有哪些优势

物联网很多应用现在都普遍用了LoRa技术的芯片,然而没有使用LoRaWan网络协议。经过调查发现,没有使用LoRaWAN网络协议的原因有:应用点数少、规模小,有的是因为LoRaWAN成本高,技术要求高,短时间内无法掌握&am…

【渝粤教育】国家开放大学2018年春季 0471-21T畜牧学 参考试题

科目编号:[0471] 座位号 2017-2018学年度第二学期期末考试 畜牧学 试题 2017年 12 月 一、名词解释(本大题共5小题,每小题3分,共计15分) 1.限制性氨基酸 2.短期优饲 3.顶体反应 4&#xff0…

如何选择LoRa产品

LoRa以其“长距离,低功耗”的优势,成为物联网通信技术的后起之秀。LoRaWAN以其明显的优势:大容量、全球统一的标准、免费频段、低成本与灵活性,和WiFi一样,成为“私有物联网”的首要选择(NB-IoT&#xff0c…

485转换器产品类型介绍

485转换器从性能上可以分为如下几种:无源型485转换器,有源型485转换器,防雷型485转换器,光隔离型485转换器,防雷光隔离型485转换器。接下来我们就跟随飞畅科技的小编一起来详细了解下吧! 1、无源型485转换…

Java队列接口

介绍: 队列是FIFO(先进先出)抽象数据类型(ADT)。 换句话说,按插入顺序将元素删除。 java.util.Queue是Java 中的接口,并且从java.util.Collection扩展。 一些常用的Queue实现类包括LinkedList&…

CC1310在868MHz的电路设计

一、CC1310的简单介绍 特点 CC1310器件是一款高度集成、真正的单片解决方案,其整合了一套完整的RF系统及一个片上DC-DC转换器。该器件具有出色的灵敏度和稳定性(可选择性和阻断)性能,不会以牺牲RF性能为代价来实现低功耗。极低的…

Memobus总线光端机产品功能介绍

Memobus现场总线光纤转换器,提供RS-485串口,符合基于Memobus的串行通信,通信速率4Mbps,单/双光口链网支持。产品支持一路光纤接口,一路总线数据接口,支持两路可级联上下行光纤接口,一路总线数据…

SX1301吞吐量是SX1276/8的多少倍?

1.吞吐量,LoRa网关的重要性能 从广义上讲,网关是连接2个不同网络的设备。如果一个设备,它能将LoRa无线网络和Internet连接起来,它就是一个LoRa网关。 目前,大部分的LoRa网关采用SX1301基带芯片,也有部分使…

【渝粤教育】国家开放大学2018年春季 0690-22T化工原理及实验 参考试题

科目编号:0690 座位号: 2017-2018学年度第二学期期末考试 化工原理及实验试题(B) 2018年7月 一、填空题(每空2分,共30分) 塔板负荷性能图中有______________条线,它们分别是________________、 ________…

Profibus DP总线隔离器(协议型)产品性能特点介绍

Profibus DP协议型现场总线隔离器,符合Profibus DP协议标准,通信速率6Mbps(可选12Mpbs),2路总线电接口数据相互转发,电信号隔离并为电缆系统提供星形链接。接下来就由飞畅科技的小编来为大家详细介绍下Prof…

【渝粤教育】国家开放大学2018年春季 4996T水土保持技术 参考试题

试卷代号:4996 (中央广播电视大学)2018年春季学期“开放专科”期末考试 水土保持技术试题 2018年7月 一、选择填空(每空3分,共30分) 1.水土保持技术主要包括水土保持 、生物技术、 和化学防治技…

基于CC1310的915MHz硬件设计

一、概述 CC1310内部结合了超低功耗 RF 收发器和超强48MHz Cortex-M33微控制器,使用ARM Cortex-M0专业无线控制器来处理 ROM 或 RAM 中存储的低层 RF 协议命令,确保了超低功耗和灵活度。时钟速率可以到达48MHz(外部使用24M晶振)&a…

【渝粤教育】国家开放大学2018年春季 7407-22T药物治疗学(本) 参考试题

试卷代号:7407 座位号 2017-2018学年度第二学期期末考试 药物治疗学(本)试题 2018年5月 一.填空题(每空2分,共40分) 1.影响药物作用的机体方面的因素有_________________、、、。 2.控制甲亢症候群的方法有…

rest api 可选参数_可选类型API

rest api 可选参数Java 8引入了Optional类。 简而言之,不是返回null,而是检查null,而是返回Optional实例,该实例可以设置值,也可以不设置值。 这样,您不会因NullPointerException而失败。 我不会讨论Optio…

大功率无线输出电台使用注意事项

随着智慧城市的建设,当前对无线通讯设备的需求越来越多,大功率无线电台需求越来越广泛,在消防,工业和农业等行业中起着举足轻重作用。大功率无线电台的使用方法有一定的要求,如果操作不当,会造成不好的体验…

RS-485总线HUB中继器产品性能特点介绍

RS-485总线HUB中继器,符合RS-485协议,独立3路总线电接口数据相互转发,电信号中继并为电缆系统提供星形链接。接下来就由飞畅科技来为大家详细介绍下RS-485总线HUB中继器产品性能特点,一起来看看吧! RS-485总线HUB中继…

SX1268与SX1278、SX1276对比分析以及选型南

1、产品简述 SX1278/1276是Semtech公司在2013年推出的一款远距离、低功耗的无线收发器,是一款性能高的物联网无线收发器,具备特殊的LoRa调制方式,在一定程度上增加了通信距离;而SX1268是一款新产品,同样由Semtech公司在…

【渝粤教育】国家开放大学2018年春季 8634-22TAndroid智能手机编程 参考试题

编号:8634 17-18学年第1学期期末考试 Android智能手机编程 试题(开卷) 一、选择题:(每题4分,共40分) 1.Android智能手机平台是基于( )程序语言来进行应用开…

用Java对HashMap排序

介绍&#xff1a; 在本教程中&#xff0c;我们将学习如何对Java HashMap进行排序。 我们可以按键或按值对HashMap进行排序。 我们将讨论这两种策略。 对Java 为了跟上本文的其余部分&#xff0c;我们首先构造一个HashMap&#xff1a; HashMap<Integer, Student> map …