ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java 知识点(部分)

2022-07-27 11:34:28  阅读:188  来源: 互联网

标签:知识点 Java String 方法 Object equals array 部分 变量


Java 知识点(部分)

String & StringBuilder & StringBuffer

==String类==

从类的声明,我们看出,String类继承了Serializable,Comparable和CharSequence接口

主要的属性有:valuehash

value是一个字符数组,用来存储字符串

hash是Stringhash值缓存,方便比较

  • String是不可以修改对象的。

  • StringBuilder和StringBuffer可以修改对象的。

  1. String是不可变的,如果尝试去修改,会新生成一个字符串对象,StringBuffer和StringBuilder是可变的

  2. 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的区别==

====:==

  1. 可以使用在基本数据类型变量和引用数据类型变量中

  2. 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等(不一定类型要相同)

  3. 如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体

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()方法==

  1. 是一个方法,而非一个运算符

  2. 基本数据类型没有方法调用,只能使用引用数据类型来调用

  3. Object类中的equals()方法的定义:

public boolean equals(Object obj){  
   return (this == obj);
}

说明:Object类中的定义的==equals()== 和 == 定义是相同的,是比较两个对象的地址值是否相等

  1. String、Data以及其他类型的equals()方法并不是像3中那样定义的,而是进行了重写Object中的equals(),比较的不是地址值了,而是比较的两个对象的“实体内容”是否相同

  2. 通常情况下,我们自定义的类如果使用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,String,方法,Object,equals,array,部分,变量
来源: https://www.cnblogs.com/CaiDingChao/p/16524262.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有