Java 知识点(部分)
2022/7/28 1:25:07
本文主要是介绍Java 知识点(部分),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java 知识点(部分)
String & StringBuilder & StringBuffer
==String类==
从类的声明,我们看出,String类继承了Serializable,Comparable和CharSequence接口
主要的属性有:value 和 hash
value是一个字符数组,用来存储字符串
hash是String的hash值缓存,方便比较
-
String是不可以修改对象的。
-
StringBuilder和StringBuffer可以修改对象的。
-
String是不可变的,如果尝试去修改,会新生成一个字符串对象,StringBuffer和StringBuilder是可变的
-
StringBuffer是线程安全的,StringBuilder是线程不安全的,所有在单线程环境下StringBuilder的效率会高一点
是否可变 | 是否安全 | 性能 | |
---|---|---|---|
String | 不可变 | 安全 | 低 |
StringBuilder | 可变 | 不安全 | 高 |
StringBuffer | 可变 | 安全 | 较高 |
数组==null & 数组长度为0
数组是一个空对象
int[] array = null; 数组为空,此时array不指向任何对象;
数据里面的元素为0
int[] array = new array[0]; // 定义一个长度为0的数组; int[] array = new array[2]; // 定义一个长度为2的数组,此时如果数组没有被初始化,默认的值为null;
两者如果在一句代码中,则要先判断是否为空,否则可能会出现空指针异常
if(array == null || 0 == array.length) {...} // 这种写法正确
== 和equals
==面试题:==和equals的区别==
====:==
-
可以使用在基本数据类型变量和引用数据类型变量中
-
如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等(不一定类型要相同)
-
如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体
String s1 = new String("atguigu"); String s2 = new String("atguigu"); System.out.println(s1 == s2); //false String s1 = "atguigu"; String s2 = "atguigu"; System.out.println(s1 == s2); //true
==equals()方法==
-
是一个方法,而非一个运算符
-
基本数据类型没有方法调用,只能使用引用数据类型来调用
-
Object类中的equals()方法的定义:
public boolean equals(Object obj){ return (this == obj); }
说明:Object类中的定义的==equals()== 和 == 定义是相同的,是比较两个对象的地址值是否相等
-
String、Data以及其他类型的equals()方法并不是像3中那样定义的,而是进行了重写Object中的equals(),比较的不是地址值了,而是比较的两个对象的“实体内容”是否相同
-
通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的“实体内容”是否相同。那么,我们就需要对Object中的euqals()方法进行重写,具体的重写方法如下:Customer是一个类
@Override public boolean equals(Object obj){ if(this == obj){ return true; } if(obj instanceof Customer){ Customer cust = (Customer)obj; //比较两个对象的每个属性是否相同 return this.age = cust.age && this.name.equals(cust.name); } return false; }
其实就是比较对象里面的所有的属性是否一致,一致就返回true,不一致就返回false
简述final
-
修饰类:表示类不可被继承
-
修饰方法:表示方法不可被子类覆盖(override),但是可以重载(overload)
-
修饰变量:表示变量不可以被修改
为什么 局部内部类 和 匿名内部类 只能访问局部final变量?
因为:因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效
finally:异常捕获的时候需要用到的,try中return后的代码会执行吗?会的,调用finally的时机是try块真的要return时。
finalize:是Object类中的一个方法。垃圾回收机制中 如果想被回收的时候不是真的被回收,第二次被gc回收的时候才能回收。finalize()只会在对象内存回收前被调用一次
接口 VS 抽象类
-
抽象类可以存在普通成员函数,而接口中只能存在public abstract方法
-
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final
-
抽象类只能继承一个,接口可以实现多个
接口的设计目的,是对类的行为进行约束 like a
抽象类的设计目的,是代码复用,现有子类,再有父类,对子类的共同部分进行提取,抽象类是不可以实例化的。
这篇关于Java 知识点(部分)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署