Java史上最最基础面试题系列(5、基本类型与运算)——看到,你离工作就比别人近了一半!!!

注:资料有书为证,大伙可放心翻阅并熟记,由本人亲自总结!

1、字符串创建于存储的机制是什么?

字符串的声明和初始化主要有两种,如图所示:

在这里插入图片描述

s1和s2是一种,s3和s4是另一种。

前者,当创建一个字符串常量时,会首先在字符串常量池中查找是否已经有相同的字符串被定义,其判断依据就是String类的equals(Object obj)方法的返回值。若已经定义,则直接获取对其的引用,此时不再需要创建新的对象;若没有,则首先创建这个对象,然后把它加入到字符串池中,在将它的引用返回。。

后者,存在两个引用对象S3和s4,两个内容相同的字符串对象,它们在内存中的地址是不同的。只要用到new总会生成新的对象。

拓展:对于Stirng类型的变量s,赋值语句s=null与s=" "是否相同?

对于赋值语句s=null,其中s是一个字符串类型的引用,它不指向任何一个字符串。而赋值语句s=" “中的s是一个字符串类型的引用,它指向另外一个字符串。这个字符串为” "(空)。因此两者不同!

2、"=="、equals和hashCode有什么区别?

①、"=="运算符用来比较两个变量的值是否相等。

②、equals是Object类提供的方法之一。Object类中定义的equals(object)方法是直接使用"=="运算符比较的两个对象,所以在没有覆盖equals(object)方法的情况下,equals(object)与" == "运算符一样,比较的是引用。

如果一个类没有自己定义equlas()方法,那么它将继承Object类的equals()方法。

③、hashCode()方法是从Object类中继承过来的,它也用来鉴定两个对象是否相等。

一般在覆盖equals()方法的同时也要覆盖hashCode()方法,否则,就会违反Object.hashCode的通用约定。

hashCode()方法的返回值和equals()方法的关系如下:如果x.equals(y)返回true,即两个对象根据equals方法比较是相等的,那么调用这两个对象中任意一个对象的hashCode()方法都必须产生同样的整数效果。如果x.equals(y)返回false,即两个对象根据equals()方法比较是不相等的,那么x和y的hashCode()方法的返回值有可能相等,也有可能不相等。反之,hashCode()方法的返回值不相等,一定能推出equals()方法的返回值也不相等,而hashCode()方法的返回值相等,equls方法的返回值则可能相等,也可能不相等。

3、String、StringBuffer、StringBuilder和StringTokenizer有什么区别?

Java中有4个类可以对字符或字符串进行操作,它们分别是Character、String、StringBuffer和StringTokenizer。其中Character用于单个字符操作,String用于字符串操作,属于不可变类,而StringBuffer也是用于字符串操作,不同之处是StringBuffer属于可变类。

String是不可变类,也就是说,String对象一旦被创建,其值将不能被改变,而StringBuffer是可变类,当对象被创建后仍然可以对其值进行修改。

当一个字符串需要经常被修改时,使用StringBuilder比使用String要好很多。

StringBuilder也是可以被修改的字符串,它于StringBuffer类似,都是字符串缓冲区,但StringBuilder不是线程安全的。

因此,只有单线程访问时可以使用StringBuilder,当有多个线程访问时,最好使用线程安全的StringBuffer

在执行效率方面,StringBulider时最高的,StringBuffer次之,String最低,鉴于这种情况,一般而言,如果要操作的数据量比较小,应优先使用String类;如果实在单线程下操作大量数据,应优先使用StringBuilder类;如果实在多线程下操作大量数据,应优先考虑StringBuffer类。

StringTokenizer是用来分割字符串的工具类。

4、Java中的数组是不是对象?

在Java中,数组不仅有自己的属性,也有一些方法可以被调用。而对象的特点时封装了一些数据,同时提供了一些属性和方法,所以从这个角度来看,数组是对象。

5、数组的初始化方式有哪几种?

一维数组声明方式:type[] arrayName或者type arrayName[]

如果需要分配空间,则还可以这样定义type[] arrayName=new type[arraySize];

二维数组有三种声明方式:type[][] arrayNametype arrayName[][]type[] arrayName[]

需要注意的是,在声明二维数组中,其中[]必须为空!

二维数组分配空间,格式如下:type arrayName[][] = new type[行数][列数]

与C语言不同,在Java中,二维数组的第二维的长度可以不同,

6、length属性与length()方法有什么区别?

数组提供了length属性来获取数组的长度;length()方法是针对字符串而言的。

此外,Java中还有一个计算对象大小的方法——size()方法,该方法时针对泛型集合而言的,用于查看泛型中有多少个元素。

拓展:泛型是对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类

转载麻烦请附录地址,感谢大家配合!!!
https://blog.csdn.net/HOLLOWYANG/article/details/119986430

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值