栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java面试突击V2.0知识点整理(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java面试突击V2.0知识点整理(二)


1. char型变量中能不能存储一个中文汉字?为什么?
  • 可以。Java默认Unicode编码,Unicode码占16位。char两个字节正好16位

2. public、private、protected的区别,继承方法与访问权限对比


3. float f=3.4;是否正确?
  • 不正确,3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting, 也称为窄化)会造成精度损失,因此需要强制类型转换float f = (float)3.4;或者写成float f = 3.4F

4. short s1 = 1;s1 = s1+1; 有错吗?short s1 = 1;s1 += 1; 有错吗?
  • 对于short s1 = 1; s1 = s1 + 1; 由于1是int类型,因此 s1+1运算结果也是int型,需要强制类型转换才能赋值给short型。而short s1 = 1; s1 += 1; +=操作符会进行隐式自动类型转换,是Java语言规定的运算符;Java编译器会对它进行特殊处理,因此可以正确编译。因为s1 += 1;相当于s1 = (short)(s1 + 1)

5. & 和 &&的区别
  1. &:(1)按位与;(2)逻辑与

    • 按位与:0 & 1 = 0 ; 0 & 0 = 0;1 & 1 = 1
    • 逻辑与:a == b & b == c (即使a==b已经是false, 程序还是会继续判断b是否等于c)
  2. && : 短路与

    • a == b && b == c (当a == b为false则不会继续判断b是否等于c)

    比如判断某对象中的属性是否等于某值,则必须使用&&, 否则会出现空指针问题

6. IntegerCache
  • Integer 在-128~127之间做了缓存,合理优化。最大边界可通过-XX : AutoBoxChacheMax进行配置
  • 示例代码:
	package otherDemo;
	
	public class IntegerCache {
	    public static void main(String[] args) {
	        Integer a = 100, b = 100, c = 129, d = 129;
	        System.out.println("a==b: " + (a == b));
	        System.out.println("c==d: " + (c == d));
	    }
	
	}


7. Locale类是什么?
  • Locale类用来根据语言环境来动态调整程序的输出

8. Java中final、finally、finalize的区别和用法
  1. final: 是一个修饰符也是一个关键字,主要用在三个地方:类、方法、变量

    • 被final修饰的类无法被继承。final类中的所有成员方法都会被隐式地指定为final方法
    • 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改·;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。但是它指向的对象的内容是可变的
    • 被final修饰的方法将无法被重写,但允许重载注意:类中所有的private方法会隐式的被指定为final方法
    • 使用final方法的原因有两个:第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。
  2. finally: 一个关键字

    • finally在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出或者捕获,finally块都会执行,通常用于释放资源
    • finally块正常情况下一定会被执行。但是有至少两个极端情况:①如果对应的try块没有执行,则这个try块的finally块并不会被执行 ② 如果在try块中jvm关机,例如system.exit(n), 则finally块也不会执行
    • finally块中如果有return语句,则会覆盖try或者catch中的return 语句,导致二者无法return ,所以强烈建议finally块中不要存在 return 关键字
  3. finalize:

    • finalize()是Object类的protected方法,子类可以覆盖该方法以实现资源清理工作
    • GC再回收对象之前都会调用该方法,finalize()方法是存在很多问题的:
    	- Java语言规范并不保证finalize方法会被及时地执行,更根本不会保证它们一定会被执行
    	- finalize()方法可能带来性能问题,因为JVM通常在单独的低优先级线程中完成finalize的执行
    	- finalize()方法中,可将待回收对象赋值给GC Roots可达的对象引用,从而达到对象再生的目的
    	- finalize()方法最多由GC执行一次(但是可以手动调用对象的finalize方法)
    

19. hashCode()和equals()的区别

下面从性能和可靠性角度来介绍它们的区别,它们的区别也基本体现在这里

  • equals()既然已经能实现对比的功能了,为什么还要hashCode()呢?
	因为重写的equals()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()
	进行对比,则只要生成一个hash值就可以了,效率很高
  • hashCode()既然效率那么高为什么还有equals()呢?(重要)
因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样
(生成hash值的公式可能存在的问题),所以hashCode()只能说是大部分时候可靠,
并不是绝对可靠,所以我们可以得出下面两条结论:
1. equals()相等的两个对象它们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的
2. hashCode()相等的两个对象他们的equals()不一定相等,也就是hashCode()不是绝对可靠的
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314423.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号