首页 > 编程语言 >java基础

java基础

时间:2024-12-07 09:43:37浏览次数:5  
标签:Java String 对象 基础 equals 字符串 java 方法

1,JDK 和 JRE 有什么区别?
JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开

发环境和运行环境。

JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行

提供了所需环境。
2,== 和 equals 的区别是什么?
1.运算符:
当用于比较基本数据类型(如int、double、char等)时,
比较的是它们的值是否相等。
引用数据类型比较:
当用于比较引用数据类型(如对象)时,比较的是两个对象的引用(内存地址)是否相同。
2.()equals()方法
equals()方法是在Object类中定义的一个方法,它的本意是用来比较两个对象的内容是否相等。不过,在Object类中的equals()方法默认实现和
是一样的,也就是比较对象的引用。
很多类(如String、Integer等)会重写equals()方法来根据对象的内容进行比较。例如String类的equals()方法,底层原理就是将equals方法重写后,来实现比较内容的。
3,final 在 Java 中有什么作用?
final 修饰的类叫最终类,该类不能被继承。

final 修饰的方法不能被重写。

final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改
4,Java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder。

String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,
而StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字
符串内容的情况下最好不要使用 String。StringBuffer 和 StringBuilder 最大的区别
在于,StringBuffer是线程安全的。而StringBuilder是非线程安全的,但StringBuilder
的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境
下推荐使用 StringBuffer。
5,Java 有哪些数据类型
基本数据类型:
整数类型(byte,short,int,long) 长度分别是1,2,4,8字节
浮点类型(float,double) 长度分别是4,8字节
字符型(char) 长度2字节
布尔型(boolean) 长度1/8字节
引用类型:
类(class)
接口(interface)
数组([])
6,接口和抽象类有什么区别?
1,实现:抽象类的子类使用 extends 来继承;接口必须使用 implements来实

现接口。

2,构造函数:抽象类可以有构造函数;接口不能有。

3,实现数量:类可以实现很多个接口;但是只能继承一个抽象类。

4,访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是

任 意访问修饰符。
7,重载(Overload)和重写(Override)的区别。
重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、
顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进
行区分。
重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出
的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为 pri
vate 则子类中就不是重写。
8,两个对象的 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() 相等即两个键值对的哈希值相等,然而哈希值相等,并不一
定能得出键值对相等
9,什么是 Java 序列化?什么情况下需要序列化?
Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再
读出来。
以下情况需要使⽤ Java 序列化:
想把内存中的对象状态保存到⼀个⽂件中或者数据库中时候;
想⽤套接字在⽹络上传送对象的时候;
想通过 RMI(远程⽅法调⽤)传输对象的时候。
10,怎么实现动态代理?
JDK 原⽣动态代理和 cglib 动态代理。
JDK 原⽣动态代理是基于接⼝实现的,⽽cglib 是基于继承当前类的⼦类实现的。
11,为什么要使⽤克隆?
克隆的对象可能包含⼀些已经修改过的属性,⽽ new 出来的对象的属性都还是初
始化 时候的值,所以当需要⼀个新的对象来保存当前对象的“状态”就靠克隆⽅法
了。 
12,说⼀下你熟悉的设计模式?
单例模式:保证被创建⼀次,节省系统开销。

⼯⼚模式(简单⼯⼚、抽象⼯⼚):解耦代码。

观察者模式:定义了对象之间的⼀对多的依赖,这样⼀来,当⼀个对象改变时,

它的所有的依赖者都会收到通知并⾃动更新。

模版⽅法模式:定义了⼀个算法的⻣架,⽽将⼀些步骤延迟到⼦类中,模版⽅ 法

使得⼦类可以在不改变算法结构的情况下,重新定义算法的步骤。

代理模式:代理模式给某⼀个对象提供⼀个代理对象,并由代理对象控制对原对象

的引⽤ 
13, jdk8新特性

  1. lambda表达式
  2. 函数式接口。
  3. 方法引用。
  4. Stream流
  5. 日期时间类

14,String 类的常用方法都有那些

indexOf():返回指定字符的索引。

charAt():返回指定索引处的字符。

replace():字符串替换。

trim():去除字符串两端空白。

split():分割字符串,返回一个分割后的字符串数组。

getBytes():返回字符串的 byte 类型数组。

length():返回字符串长度。

toLowerCase():将字符串转成小写字母。

toUpperCase():将字符串转成大写字符。

substring():截取字符串。

equals():字符串比较

。。。。。。

标签:Java,String,对象,基础,equals,字符串,java,方法
From: https://www.cnblogs.com/xiaomubupi/p/18591447

相关文章