Java面试 基础篇

Java面试题 基础篇

1 JDK 和 JRE 有什么区别
JDk		java开发工具包提供了java的开发环境和运行环境
JRE 	java运行环境,为Java的运行提供了环境
2 == 和 equals 的区别是什么

对于基本类型和引用类型 == 的效果是不同的
基本类型 == 比较值是否相同
引用类型 == 比较引用是否相同
equals 本质上就是 == 只不过很多类重写了 equals 方法(比如String, Integer等),把它变成了值比较。
例如:

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true
// 因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。
3 两个对象的 hashCode()相同,则 equals()也一定为 true 对不对

不对 两个对象的hashCode()相同 equals() 不一定为true
例如:

String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d", str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));
//执行的结果:
//	str1:1179395 | str2:1179395
//	false

很显然 通话重地 的 hashCode() 相同,然而 equals() 则为 false,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等

4 final 在 java 中有什么作用

final 修饰的类叫最终类, 该类不能被继承
final 修饰的方法不能被重写
final 修饰的变量叫常量,常量必须初始化,初始化之后不能修改

5 java中的Math.round(-1.5)等于多少

等于 -1

6 .String 属于基础的数据类型吗

String不属于基本数据类型,基本数据类型只有,byte, short, int, long, float, double, char, boolean
String属于对象

7 java 中操作字符串都有哪些类 它们之间有什么区别

操作字符串的类有: String, StringBuffer, StringBuilder

  • String 和 StringBuffer、StringBuilder 的区别 :
    • String声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的String对象, 而StringBuffer,StringBuilder可以在原有对象基础上进行操作,所以在经常改变字符串内容的情况下不使用String
  • StringBuffer 和 StringBuilder 的区别:
    • StringBuffer是线程安全的,而StringBuilder是非线程安全的,但StringBuilder的性能高于StringBuffer,在单线程下推荐使用StringBuilder,多线程环境下使用StringBuffer
8 String str="i"与 String str=new String(“i”)一样吗

不一样, 因为内存分配方式不一样。String str=“i”的方式,jvm会将其存储在常量池中,而new String(“i")的方式,会存储到堆内存中

9 如何将字符串反转

使用 StringBuilder 或者 StringBuffer 的reverse()方法
例如:

// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefg");
System.out.println(stringBuilder.reverse()); // gfedcba
10 String 类的常用方法都有那些
indexOf()					返回指定字符的索引
charAt()					返回指定索引处的字符
replace()					 字符串替换
trim()						去除字符串两端空白
split()					分割字符串,返回一个分割后的字符串数组
getBytes()				返回字符串的byte类型数组
length()					返回字符串长度
toLowerCase()			将字符串转换成小写
toUpperCase()			将字符串转换成大写
substring()				  截取字符串
equals()					字符串比较
11 抽象类必须要有抽象方法吗

抽象类不一定非要有抽象方法

abstract class Cat {
    public static void sayHi() {
        System.out.println("hi~");
    }
}
12 普通类和抽象类有哪些区别

普通类不能包含抽象方法, 抽象类可以包含抽象方法
抽象类不能直接实例化, 普通类可以直接实例化

13 抽象类能使用 final 修饰吗

不能 定义抽象类的目的就是用来被继承的, 如果用final修饰, 该类就不能被继承 所以final不能修饰抽象类

14 接口和抽象类有什么区别

实现: 抽象类的子类使用extends来继承, 接口必须用implements来实现
构造函数: 抽象类可以有构造函数, 接口不能有
main方法: 抽象类可以有main方法, 并且能运行main方法, 接口不能有main方法
实现数量: 类可以实现很多个接口, 但只能继承一个抽象类
访问修饰符: 接口中的方法默认使用public修饰, 抽象类中的方法可以是任意修饰符修饰

15 java中的IO流分为几种

按功能分: 输入流和输出流
按类型分: 字节流和字符流
字节流和字符流的区别: 字节流按8位传输,以字节为单位输入输出数据, 字符流按16位传输,以字符为单位输入输出数据

16 BIO,NIO,AIO 有什么区别

BIO: Block IO 同步阻塞式IO, 就是平常使用的传统IO, 特点是 模式简单使用方便,并发处理能力低
NIO: New IO 同步非阻塞式IO, 式是传统IO的升级, 客户端和服务器端通过Channel(通道)通讯, 实现了多路复用
AIO: Asynchronous IO 是NIO的升级, 也叫NIO2 实现了异步非阻塞IO, 异步IO的操作基于事件和回调机制

17 Files的常用方法
Files.exists();						检测文件是否存在
Files.createFile();					创建文件
Files.createDirectory();		创建文件夹
Files.delete();						删除一个文件或目录
Files.copy();						  复制文件.
Files.move();						移动文件
Files.size();						 查看文件个数
Files.read();						读取文件
Files.write();					 写入文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值