java SE

https://blog.csdn.net/qq_38977097/article/details/88826939

1、为什么重写equals还要重写hashcode?

https://www.cnblogs.com/expiator/p/6064974.html
如果重写equals后不重写hashcode,将导致:
(1)remove对象时传入的对象与map中的对象equals,但hashcode不一样,导致对象删不掉,存在内存泄露。
(2)get对象时明明在hashMap中存在对象,但却得不到
(3)put进相同对象。
为了保证同一个对象,保证在equals相同的情况下hashcode值必定相同,如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的(因为equal都是根据对象的特征进行重写的),但hashcode确实不相同的。

2、Object若不重写hashCode()的话,hashCode()如何计算出来的?

按照对象的内存地址计算一个整数。
https://www.cnblogs.com/wang-meng/p/7501378.html

3. java8新特性?

. https://blog.csdn.net/yitian_66/article/details/81010434

4. 说说Lamda表达式的优缺点。?

5. 一个十进制的数在内存中是怎么存的?

	==整形数据在内存中是以2进制本数的补码存在的==;但正整数的补码还是原来的2进制,而负数则要先取反再+1才是它的补码,(+1后的最左边以为就是符号位,1为负,0为正;)比如-10的二进制: 1、先取-10的绝对值的二进制数值,为0000000000001010; 2、取反,1111111111110101 3、加1:1111111111110110; 这个就是-10在内存中的储存形式;

6、为什么计算机只能处理二进制:

1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。 (2)简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。 (3)适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。 (4)易于进行转换,二进制与十进制数易于互相转换。 (5)用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。

7、为啥有时会出现4.0-3.6=0.40000001这种现象?

2进制的小数无法精确的表达10进制小数,计算机在计算10进制小数的过程中要先转换为2进制进行计算,这个过程中出现了误差。
在二进制系统中无法精确地表示分数1/10,这就好像十进制无法精确地表示分数1/3一样。如果在数值计算中不允许有任何舍入误差 ,就应该使用BigDecimal类

8、Java支持的数据类型有哪些?什么是自动拆装箱?

基本数据类型:
整数值型:byte,short,int,long,
字符型:char
浮点类型:float,double
布尔型:boolean
整数默认int型,小数默认是double型。Float和long类型的必须加后缀。
首先知道String是引用类型不是基本类型,引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。引用类型包括类、接口、数组等。String类还是final修饰的(所以不可变)
包装类就属于引用类型自动装箱和拆箱就是基本类型和引用类型之间的转换,至于为什么要转换,因为基本类型转换为引用类型后,就可以new对象,从而调用包装类中封装好的方法进行基本类型之间的转换或者toString(当然用类名直接调用也可以,便于一眼看出该方法是静态的),还有就是如果集合中想存放基本类型,泛型的限定类型只能是对应的包装类型。

9、什么是值传递和引用传递?

public void add(int a) { int b = a; } 这个可以看作是值传递,a是基本数据类型,他把他的值传给了b public void add(Object obj) { Object objTest = obj; } 这个可以看作是址传递,obj是引用数据类型,是把他栈中指向堆中的对象的地址值赋值给了objTest.== 这时候就同时有两个引用指向了堆中的某个Object对象==。 其实这样看来,java应该只有值传递的。如果是基本数据类型,传递的就是实际的值. 如果是引用数据类型,传递的就是该引用的地址值.

10、数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?

数组是有序的,map和set是无序的
1、存储内容比较:
Array 数组可以包含基本类型和对象类型
ArrayList 却只能包含对象类型
Array 数组在存放的时候一定是同种类型的元素。ArrayList 就不一定了 。
2、空间大小比较:
Array 数组的空间大小是固定的,所以需要事前确定合适的空间大小。
ArrayList 的空间是
动态增长
的,而且,每次添加新的元素的时候都会检查内部数组的空间是否足够。
3.方法上的比较:
ArrayList 方法上比 Array 更多样化,比如添加全部 addAll()、删除全部 removeAll()、返回迭代器 iterator() 等。
适用场景:
如果想要保存一些在整个程序运行期间都会存在而且不变的数据,我们可以将它们放进一个全局数组里, 但是如果我们单纯只是想要以数组的形式保存数据,而不对数据进行增加等操作,只是方便我们进行查找的话,那么,我们就选择 ArrayList。
如果我们需要对元素进行频繁的移动或删除,或者是处理的是超大量的数据,那么,使用 ArrayList 就真的不是一个好的选择,因为它的效率很低,使用数组进行这样的动作就很麻烦,那么,我们可以考虑选择 LinkedList。

11 、简述正则表达式及其用途。

在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。计算机处理的信息更多的时候不是数值而是字符串,正则表达式就是在进行字符串匹配和处理的时候最为强大的工具,绝大多数语言都提供了对正则表达式的支持。
15、Java中是如何支持正则表达式操作的?
Java中的String类提供了支持正则表达式操作的方法,包括:matches()、replaceAll()、replaceFirst()、split()。此外,Java中可以用Pattern类表示正则表达式对象,它提供了丰富的API进行各种正则表达式操作,如

import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RegExpTest {     
public static void main(String[] args) {         
  String str = "成都市(成华区)(武侯区)(高新区)";         
  Pattern p = Pattern.compile(".*?(?=\\()");         
  Matcher m = p.matcher(str);        
  if(m.find()) {             
  System.out.println(m.group());        
               }     
        } 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值