失效链接处理 |
java面试知识点整理 PDF 下载
本站整理下载:
相关截图:
主要内容:
1.1.String能被继承吗,为什么?
不能,因为String是被final修饰的,final修饰的类是不能被继承的。
1.2.Java的几种数据是什么?各自占用多少字节?
byte :1字节,表示范围-128~127之间
short:2字节,表示范围是-32768~32767之间
int:4字节,表示范围是负的2的31次方到正的2的31次方
long :8字节,表示范围是负的2的63次方到正的2的31次方减1.
float:4字节,表示范围3.4e-45~1.4e38.直接赋值时需要在气候加上f
double:8字节,表示范围在4.9e~1.8e308,赋值加上d
Boolean:只有true和false
Char:2字节,存储Unicode码,用单引号赋值
1.3.==与equals的区别是什么?
*通俗点讲:==是看看左右是不是一个东西。equals是看看左右是不是长得一样。如何记住嘛。如果单纯是想记住,==:等于。equals:相同。两个长得一样的人,只能说长的相同(equals),但是不等于他们俩是一个人。你只要记住equals,==就不用记了。你们去感受一下。
*术语来讲的区别:1.==是判断两个变量或实例是不是指向同一个内存空间 equals是判断两个变量或实例所指向的内存空间的值是不是相同 2.==是指对内存地址进行比较 equals()是对字符串的内容进行比较3.==指引用是否相同 equals()指的是值是否相同
1.4.String、StringBuilder和StringBuffer的区别
String为字符串常量(因为内部数组value[]有final修饰),而 StringBuilder和StringBuffer均为字符串变量即String对象一旦被创建之后该对象是不可变更的,但后两者的对象是变量,是可以变更的。
在线程安全上,StringBuilder是线程不安全的,StringBuffer是线程安全的,因为StringBuffer在append方法上添加了Synchronized修饰。
String、StringBuffer和StringBuilder都是被final修饰,不能被继承。String变量创建后放入方法区的常量池,而StringBuilder和StringBuffer则是存入堆中。
1、String str1 =“123”;
通过引号直接创建字符串对象,先会从常量池中判断是否存在“123”这个对象,如果不存在,则会在常量池创建这个对象,并且返回常量池中“123”对象的引用给str1;如果常量池中存在“123”对象,则会直接返回常量池中的引用。
2、String str2 = newString(“123”);
首先“123”是一个倡廉和字符串,因此会先在常量池中创建“123”字符串对象 ,然后再堆中在创建一个字符串对象,将123字符串对象复制到堆中新创建的对象字符数组中,因此该方式不仅会在堆中,还会在常量池中创建123字符串对象。
3、String str3 = 123.intern();
这种方式通过intern方法返回一个字符串引用,intern方法是一个native方法,当常量池中存在123字符串常量时,则直接返回该常量池中的字符串引用,若不存在,则会先在常量池中创建123字符串对象,然后直接返回;新创建对象的引用,与方式一类似,该方法用用预创建某些经常访问的字符串对象保存在常量池中,避免经常创建对象。
4、String str4 = str2.intern();
该种方式是在方式二基础上进行的,intern方法先会判断常量池中是否存在于str2相同字符串的对象,若有,则返回该引用,若无,则在常量池创建一个引用(CONSTAT_String_info)指向str2,然后返回该引用,实际上返回的是str2的引用。
1.5.java序列化
https://blog.csdn.net/devcloud/article/details/100707463
1.5.1 什么是java序列化
序列化就是把对象改成可以存到磁盘或者通过网络发送到其他运行中的java虚拟机的二进制格式的过程,并可以通过反序列化恢复对象状态。Java序列化API给开发人员提供了一个标准机制,通过java.io.Serializable和java.io.Externalizable接口,ObjectInputStream及ObjectOutputStream处理对象序列化。
1.5.2 如何实现java序列化
让 Java 中的类可以序列化很简单. 你的 Java 类只需要实现 java.io.Serializable 接口, JVM 就会把 Object 对象按默认格式序列化
1.5.3 Java 中的可序列化接口和可外部接口之间的区别是什么?
Externializable给我们提供writeExternal()和readExternal()方法,这让我们灵活地空值java序列化机制,而不是依赖于java的默认序列化。正确的实现Externalizable接口可以显著提高应用程序的性能。
1.5.4 可序列化的方法有多少?如果没有方法,那么可序列化接口的用途是什么?
可序列化 Serializalbe 接口存在于java.io包中,构成了 Java 序列化机制的核心。它没有任何方法, 在 Java 中也称为标记接口。当类实现 java.io.Serializable 接口时, 它将在 Java 中变得可序列化, 并指示编译器使用 Java 序列化机制序列化此对象。
1.5.5 什么是 serialVersionUID ?如果你不定义这个, 会发生什么?
serialVersionUID 是一个 private static final long 型 ID, 当它被印在对象上时, 它通常是对象的哈希码,你可以使用 serialver 这个 JDK 工具来查看序列化对象的 serialVersionUID。SerialVerionUID 用于对象的版本控制。也可以在类文件中指定 serialVersionUID。不指定 serialVersionUID的后果是,当你添加或修改类中的任何字段时, 则已序列化类将无法恢复, 因为为新类和旧序列化对象生成的 serialVersionUID 将有所不同。Java 序列化过程依赖于正确的序列化对象恢复状态的, ,并在序列化对象序列版本不匹配的情况下引发 java.io.InvalidClassException 无效类异常
|