Java面试基础

这篇具有很好参考价值的文章主要介绍了Java面试基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、==和equals

在Java中,使用字符串常量"a"可以直接创建一个字符串对象,因为Java会将所有的字符串常量都保存在一个字符串常量池中,如果使用相同的字符串常量创建字符串对象,则会指向同一个对象,这样就可以避免不必要的内存浪费。

而对于 “new String(“a”)” 这种方式,实际上会创建两个对象。第一个对象是字符串常量"a",它会保存在字符串常量池中;第二个对象是通过构造函数创建的字符串对象,它保存在堆内存中。因此,总共会创建两个对象,一个在字符串常量池中,一个在堆内存中。

需要注意的是,如果字符串常量池中已经存在相同的字符串常量,则不会重复创建,而是直接返回该字符串常量的引用。因此,如果再使用相同的字符串常量创建字符串对象时,也只会创建一个对象。

1、String这个类的内部结构是,他有一个字符数组属性,
HahsCode得到的是什么,得到的是通过字符数组里面的每一个元素,转成10进制相加,比如1是49,2是50
equals先是比较地址,是否一样,不一样在比较字符数组的长度和每个数组的内容。

2、包装类型的类里面,其实有个对应的基本类型属性,这和包装类型的值是一样的。
包装类型的equals比较的是什么?包装类型的equals是,把包装类型转成基本类型,然后在比较值是否相等。
hasHcode是怎么得到的,hashCode是拿到这个包装类型里面的基本类型所对应的值,然后转成hash码。

3、“==” 如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。
4、equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。注意String和包装类型的equals比较特殊,他是先比较地址,然后在比较内容。

二、for、forEach、iterator区别

for循环
1、这样的遍历一般边遍历边往列表里面加item可以往i以后加,不能往i以前加
2、删除操作也是能删除i以后,不能删除i及i以前的item。
总结:for循环遍历,如果要边遍历边删除或者增加,那么只能把数据添加到当前还没有遍历到的位置。

forEach
1、foreach遍历数组,会转成普通的for遍历数据。比如int[]
2、foreach遍历集合类型,集合是指实现了Iterable接口,比如List,set,queue,注意Map不是,除非把Map转成set

区别:
效率差别:for循环和Iterator效率差不多,forEach要慢些。
条件区别:for循环需要知道数组或者集合的大小才能进行遍历,forEach和Iterator不需要
多态区别:for循环和forEach都需要先知道集合的类型,甚至是集合内元素的类型,即需要访问内部的成员,不能实现多态;Iterator是一个接口类型,他不关心集合或者数组的类型,而且他还能随时修改和删除集合的元素

适用场景区别:
for循环一般用来处理比较复杂的循环,可预知大小的集合或数组。因为涉及索引的操作,**可能会由于开发者的问题导致索引混乱,因此不太安全。**涉及集合元素更新操作的建议用for循环。
forEach 基本和Iterator类似。
Iterator是最强大的,他可以在不需要知道元素和集合的类型的情况下随时修改或者删除集合内部的元素,当你需要对不同的容器实现同样的遍历方式时,迭代器是最好的选择。

删除元素:
foreach方式遍历元素的时候,是先生成iterator,然后使用iterator遍历。在生成iterator的时候,会保存一个expectedModCount参数,这个是生成iterator的时候List中修改元素的次数。如果你在遍历过程中删除元素,List中modCount就会变化,如果这个modCount和exceptedModCount不一致,就会抛出异常。这个是为了安全的考虑。

如果遍历过程中,使用List的remove修改了元素,可能会出现不正常的现象。
如果使用iterator的remove方法则会正常,因为iterator的remove方法会在内部调用List的remove方法,但是会修改excepedModCount的值,因此会正常运行。

注意:List的Remove方法和iterator的remove方法有区别。

三、StringBuild和StringBuffer的区别

跳转文章来源地址https://www.toymoban.com/news/detail-740791.html

四、++i和i++区别

跳转

到了这里,关于Java面试基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 🔥🔥Java开发者的Python快速进修指南:面向对象基础

    当我深入学习了面向对象编程之后,我首先感受到的是代码编写的自由度大幅提升。不同于Java中严格的结构和约束,Python在面向对象的实现中展现出更加灵活和自由的特性。它使用了一些独特的,如self和cls,这些不仅增强了代码的可读性,还提供了对类和实例的明确

    2024年02月05日
    浏览(68)
  • Java/Python/Go不同开发语言在进程、线程和协程的设计差异

    在多线程项目开发时,最常用、最常遇到的问题是 1,线程、协程安全 2,线程、协程间的通信和控制 本文主要探讨不同开发语言go、java、python在进程、线程和协程上的设计和开发方式的异同。 进程 进程是 操作系统进行资源分配的基本单位,每个进程都有自己的独立内存空

    2024年01月23日
    浏览(50)
  • C语言--基础面试真题

    1、局部变量和静态变量的区别 普通局部变量和静态局部变量区别 存储位置: 普通局部变量存储在栈上 静态局部变量存储在静态存储区 生命周期: 当函数执行完毕时,普通局部变量会被销毁 静态局部变量的生命周期则是整个程序运行期间,即使函数调用结束,静态局部变

    2024年04月27日
    浏览(43)
  • Go 语言面试题(一):基础语法

    := 声明+赋值 = 仅赋值 指针用来保存变量的地址。 例如 运算符,也称为解引用运算符,用于访问地址中的值。 &运算符,也称为地址运算符,用于返回变量的地址。 允许 Go 没有异常类型,只有错误类型(Error),通常使用返回值来表示异常状态。 Goroutine 是与其他函数或方

    2024年02月14日
    浏览(48)
  • C语言面试之旅:掌握基础,探索深度(面试实战之单片机——IO)

            梦想和自由一样,都有代价,但都值得。                                                                                                                                                ----小新         单片机是一种微控制器,它包含一个处

    2024年02月05日
    浏览(43)
  • Java面试知识点(全)- Java面试基础部分一

    Java面试知识点(全)https://nanxiang.blog.csdn.net/article/details/130640392 语法基础 封装 利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联

    2024年02月05日
    浏览(46)
  • 【Java面试题】Java基础——排序算法

    冒泡排序★★★ 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。 它重复的遍历过要排序的数列, 一次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来 。 这个算法的名字由来是因为越大的元素会经由交换慢慢\\\"浮\\\"到最后面。 当然,大家可以按照从大到小的

    2024年02月12日
    浏览(34)
  • 【Java面试题】Java基础——面向对象

    重载和重写的区别★★★ 重载(Overloading)和重写(Overriding)都是Java中面向对象编程的特性,它们都可以让子类继承父类的方法。但是它们之间有一些重要的区别: 定义方式: 重载(Overloading): 在同一个类中 ,可以有 多个方法名相同但参数列表不同的方法 。当调用一个方法时,

    2024年02月11日
    浏览(38)
  • Java面试基础

    在Java中,使用字符串常量\\\"a\\\"可以直接创建一个字符串对象,因为Java会将所有的字符串常量都保存在一个字符串常量池中,如果使用相同的字符串常量创建字符串对象,则会指向同一个对象,这样就可以避免不必要的内存浪费。 而对于 “new String(“a”)” 这种方式,实际上会

    2024年02月06日
    浏览(34)
  • java——《面试题——基础篇》

    全文章节 Java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java——《面试题——Dob

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包