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:仅本类可以访问,其他类都不可访问。