0
点赞
收藏
分享

微信扫一扫

2022.1.19刷题知识点

七公子706 2022-01-20 阅读 41

hashcode和equals约定关系如下

  1. 如果两个对象相等,那么他们一定有相同的哈希值
  2. 如果两个对象的哈希值相等,那么这两个对象有可能相等也有可能不相等,

加载驱动的方法

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

Java中的char

java中的char是Unicode编码,Unicode编码占两个字节,就是16位,足够存储一个汉字。

Properties实现了Map接口,是线程安全的

Java关键字

​ true、false、null都不是关键字。

​ goto、const 是保留的关键字。

abstract                continue           for            new        
switch                  default            if             package     
synchronized            do                 goto           private     
this                    break              double         implements   
protected               throw              byte           else       
import                  public             throws         case       
enum                    instanceof         return         transient  
catch                   extends            int            short       
try                     char               final          interface    
static                  void               class          finally   
long                    strictfp           volatile       const      
float                   native             super          while
boolean                 assert 

变量的引用

常量池:未经 new 的常量

堆区:成员变量的引用,new 出来的变量

栈区:局部变量的引用

成员变量的引用在堆区,是因为成员变量的所属对象在堆区,所以它也在堆区。

局部变量的引用在栈区,是因为局部变量不属于某一个对象,在被调用时才被加载,所以在栈区。

String,StringBuffer,StringBuilder的区别

可变与不可变

​ String 类中使用字符数组保存字符串,如下就是,因为有final修饰符,所以可以知道String对象是不可变的。String为不可变对象,一旦被创建,就不能修改它的值,对于已经存在可的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去。

 private final char value[];

​ StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。

char[] value

StringBuffer是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象,它只能通过构造函数来建立。如:StringBuffer sb = new StringBuffer();不能通过赋值符号对他进行赋值。对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中赋值的时候可以通过它的append方法.sb.append(“hello”);

线程安全

​ String中的对象是不可变的,也就可以理解为常量,显然线程安全。

​ AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。

StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是 线程安全的 。看如下源码:

public synchronized StringBuffer reverse() {
	 super.reverse();
     return this ;
}

public int indexOf(String str) {
    return indexOf(str, 0);//存在 public synchronized int indexOf(String str, int fromIndex) 方法
}

StringBuilder并没有对方法进行加同步锁,所以是 非线程安全的

StringBuilder与StringBuffer共同点

StringBuilder与StringBuffer有公共父类AbstractStringBuilder( 抽象类 )。

抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。

StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(…)。只是StringBuffer会在方法上加synchronized关键字,进行同步。

效率

最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。

效率比较String < StringBuffer < StringBuilder,但是在String S1 =“This is only a”+“simple”+“test”时,String效率最高

举报

相关推荐

0 条评论