面试中常问问题

1.==和equals的区别

==对比栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址

public class test {
    // 关于 ==  和 equals 的区别
    public static void main(String[] args) {
        String str1 = "qwe"; //在常量池里面添加内存空间
        String str2 = new String("qwe"); // 在堆内存里添加
        String str3 = str2;
        System.out.println(str1 == str2); // false
        System.out.println(str1 == str3); // false
        System.out.println(str2 == str3); // ture
        System.out.println(str1.equals(str2)); // ture
        System.out.println(str1.equals(str3)); // ture
        System.out.println(str2.equals(str3)); // ture
    }
}

str1是基本数据类型(存放在常量池中),str2是一个引用数据类型。(在堆内存中),两者的地址是不同的。二者是比较地址,因此用==会false,而equals是比较是值,会出现true

如下,a和b都是基本数据类型,因此比较变量值。

String a = "1";
String b = "1";
System.out.println(a == b);

总之一句话,==是比较地址,equals比较值

2.final

最终的

  • 修饰类:表示类不可被继承

  • 修饰方法:表示方法不可被之类覆盖,但是可以重载

  • 修饰变量:表示变量一旦被赋值就不可以改变它的值

修饰成员变量

  • 如果final修饰类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初始值。

  • 如果final修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值

修饰局部变量

  • 系统不会对局部变量进行初始化,必须由程序员显示初始化。如果赋值,这不能改变该默认值,如果没有值,可以在之后进行唯一的一次赋值。

修饰基本类型数据和引用类型数据

  • 如果是基本数据类型变量,则其数字一旦在初始化之后便不能更改

  • 如果是引用类型变量,则在对其初始化之后便不能再让其指向另一个对象,但是引用的值是可变的

posted @ 2021-08-27 13:45  Benki  阅读(31)  评论(0编辑  收藏  举报