java面试,备战春招一

1.==和equals的区别

1.对于基本数据类型==比较的是值,equals不能比较基本数据类型

2.对于引用类型,==比较的是引用地址。

3.对于引用类型,如果没有重写equals方法那么equals比较的是引用地址。若想比较引用类型的值那么需要重写equals方法。

注:如果不重写equals方法,默认调用object的equals方法,而object中的equals方法 还是==

2.介绍一下java中的final关键字

final汉语意思为:最终的

final可以修饰 类、方法、属性

1.修饰类:表示该类为最终类,无法被继承

2.修饰方法:表示该方法为最终方法,无法被子类重写。(注意只是不能被重写,仍然可以被继承)

3.修饰变量:

修饰基本数据类型:如果修饰的是基本数据类型那么该值为常量且该值只能被赋值一次。

(注意:可以先声明不用给初始值,但是使用前必须赋值,且只能赋值一次。)

修饰引用类型:如果修饰的是引用类型那么该引用类型的引用地址不能被修改,但是它的值可以被修改。

3.String属于基本数据类型吗?

不属于,String类型属于引用数据类型。

基本数据类型包括:整数:int、byte、long、short

​ 浮点型:float、double

​ 字符型:char

​ 布尔:boolean

4.String str=”a“和Stirng str=new String(“a”)一样吗?

String str=”a“ 会被分配到常量池中,常量池中没有重复的元素,如果常量池中存在a那么会将a的地址赋值给变量,如果没有就会在创建个a,在把变量赋值给变量。

Stirng str=new String(“a”) 会将对象分配到堆内存中,即使值一样也会重新创建对象。

5.String类型常用的方法

length():获取字符串长度

chartAt():获取指定索引位置的字符。

indexOf()返回指定字符在此字符串中第一次出现处的索引

substring()从指定位置开始截取字符串

equals()比较字符串的内容是否相同。

toUpperCase()把字符串转大写

toLowerCase()把字符串转小写

trim()去除两端空格

6.介绍一下java中的abstract 关键字

abstract 可以修饰类 和方法

表示该类为抽象类,不能被实例化出来,即new出来

抽象类只能被继承。抽象方法只能存在于抽象类中,当抽象类被继承时,子类必须实现抽象方法(若不想实现该子类也必须声明为抽象类。)。

abstract不能和final一起使用,因为abstract修饰的类需要被继承实现方法,final修饰后的方法不能被重写,两个修饰符会冲突。

7.接口和抽象类的区别

1.接口:

接口中的方法默认使用abstract修饰。

接口不能被实例化,即new出来

接口可以多实现

接口中只能定义抽象方法(java8之前)

接口中可以定义静态方法,但必须有方法体(java8之后)

2.抽象类:

抽象类使用abstract修饰

抽象类不能被实例化,即new出来

抽象类只能单继承。

抽象类中可以包括 抽象方法和非抽象方法

如果一个类继承啦抽象类那么需要实现它的抽象方法

8.Java中的static关键字有什么作用

static可以修饰 变量 方法

变量:static可以修饰变量,表示该变量为静态变量,在内存中只有一份,随着类的加载而被加载。调用时可以通过类名.变量之间调用

修饰方法:static可以修饰方法,表示该方法为静态方法,不需要创建对象就可以被外部调用,通过类名.方法名的方式。

9.说说&和&&的区别

&和&&都表示逻辑运算与,&只有两边都为true整个运算结果才为true,&&有短路功能,只要一边为false则运算结果直接为false。

10.两个对象的hashcode()一样,则equals是否也一定为true

hashCode()和equals()用来标识对象,两个方法协同工作用来判断两个对象是否相等。对象通过调用 Object.hashCode()生成哈希值,由于不可避免地会存在哈希值冲突的情况 因此hashCode 相同时 还需要再调用 equals 进行一次值的比较,但是若hashCode不同,将直接判定两个对象不同,跳过 equals ,这加快了冲突处理效率。

Object 类定义中对 hashCode和 equals 要求如下:

如果两个对象的equals的结果是相等的,则两个对象的 hashCode 的返回结果也必须是相同的。
任何时候重写equals,都必须同时重写hashCode。

11.String,Stringbuffer,StringBuilder有什么区别

String:是一个final修饰的不可变的类,一旦创建就不可以修改,并且不能被继承,String 实现了 equals()方法和 hashCode()方法。

Stringbuffer:继承自AbstractStringBuilder ,是可变类。StringBuffer内部的方法都是同步方法,是线程安全的。

StringBuilder:继承自AbstractStringBuilder ,是可变类。StringBuilder是非线程安全的,执行效率比 StringBuffer 高。

12.重载和重写有什么区别

重载:

​ 发生在同一个类中,

​ 方法名必须一样,

​ 方法的参数必须不一样。

​ 返回值类型,修饰符,可以不一样。

重写:

​ 指的是子类重写父类的方法,必须有继承,方法名返回值类型,方法参数必须一致。

13.深拷贝和浅拷贝有什么区别

浅拷贝:复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化

深拷贝:将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变

14.Java中什么是序列化/反序列

序列化:是指将对象转化成字节序列的过程,方便在网络上传输或者存储。

反序列化:就是将字节序列转换成对象的过程,恢复对象的状态和数据。

15.break 和 continue 有什么区别

break:是结束循环,跳出循环体。

continue:是结束本次循环。

16.Java访问修饰符有哪些

public:访问范围:所有类。

protected:访问范围:同一个包中的类,和该类的子类。

default:同一包内的类可以访问该成员,但在不同包内的类无法访问
private:仅本类可以访问,其他类都不可访问。

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值