为什么 Java 中的字符串是不可变的?
来源:Dev.to 在理解为什么 Java 中的字符串是不可变的之前,我们需要思考为什么我们要让某些东西不可变? 不可变意味着一旦创建我们就无法更改它。我们可以想到使某些东西不可变的唯一原因是一起使用时的同步。这就是字符串不可变的原因。在Java中, String对象是共享的,并缓存在String Pool中。它是堆上存储字符串的特定位置,如果字符串具有相同的值,则在多个线程之间共享这些字符串。例如:在字符串池中,如果已经存在一个值为“test”的字符串,并且程序想要创建另一个具有相同值的字符串对象,那么它将获得相同的引用,而不是创建一个新的字符串对象。现在我们知道字符串是如何存储在堆上的。让我们看看为什么它们没有变化。-
不变性的第一个原因是线程安全。由于行在行池中的多个线程之间共享,因此我们需要限制任何随机线程来更改它。对行的任何更改都可能影响访问同一行的其他线程。如果一个线程想要更新一行的值,它需要创建另一行并引用它。
-
通常我们使用String作为Map中的键。如果字符串是可变的,任何人都可以更改字符串的值,而我们将丢失实际的密钥。
Java中的接口和多重继承
来源:Dev.to 让我们了解什么是多重继承。多重继承是一些面向对象编程语言的一项功能,其中一个对象或类可以从多个父对象或父类继承功能。 如上图所示,多重继承子类可以有两个或多个基类,但要实现这一点,我们需要一个接口。界面
Java 中的接口是类的蓝图。它有静态常量和抽象方法。也就是说,接口只能包含抽象方法和变量,不能有方法体。它不能以与抽象类相同的方式创建。那么我们在哪里声明这些方法的主体呢?
方法体根据程序员的要求在需要该方法的类内部声明。如何声明接口?
可以使用interface关键字来声明接口。句法:interface interface_name {abstract methods}
笔记
为了在类中使用声明的接口,我们必须使用implements关键字。执行?
首先,我们将创建一个打印接口,并在其中创建一个抽象print()方法;interface printgib{
void print();
}
现在我们已经有了一个可供类使用的接口,因此让我们创建类abc和gk并在其中实现该接口。
public class abc implements printgib{
public void print(){ //1st implementation of print
System.out.println("I love you 3000");
}
public static void main(String[] args){
abc obj = new abc();
gk obj1 = new gk();
obj.print();
obj1.print();
}
}
class gk implements printgib{
public void print(){ //2nd implementation of print
System.out.println("I am Gk");
}
}
如上面的代码所示,我们实现了多重继承并实现了一个接口。现在运行代码,保存文件并...
javac file_name.java
java abc
GO TO FULL VERSION