From 16865a08b645fe036762db8545dedfa96d986754 Mon Sep 17 00:00:00 2001 From: markilue <745518019@qq.com> Date: Mon, 26 Sep 2022 19:13:17 +0800 Subject: [PATCH] =?UTF-8?q?java=E5=9F=BA=E7=A1=80=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=9D=A2=E8=AF=95=E9=A2=98=E5=AD=A6=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java_learning/enumTest/enumTest.java | 1 + .../innerclass/StaticInnerClass.java | 5 +++ .../markilue/java_learning/string/Equal.java | 39 ++++++++++++------- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/enumTest/enumTest.java b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/enumTest/enumTest.java index b63bd3b..401f698 100644 --- a/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/enumTest/enumTest.java +++ b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/enumTest/enumTest.java @@ -16,6 +16,7 @@ import org.junit.Test; * 4.如果枚举类需要的是有参构造,需要手动定义private的有参构造,调用有参构造的方法就是在常量对象名后面加(实参列表)就可以。 * 5.枚举类默认继承的是java.lang.Enum类,因此不能再继承其他的类型。 * 6.JDK1.5之后switch,提供支持枚举类型,case后面可以写枚举常量名。 + * 7.enumeration是线程安全的 * 2)枚举类的常用方法: * 1.toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法! * 2.name():返回的是常量名(对象名) 【很少使用】 diff --git a/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/innerclass/StaticInnerClass.java b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/innerclass/StaticInnerClass.java index 80f54e0..551ca0c 100644 --- a/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/innerclass/StaticInnerClass.java +++ b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/innerclass/StaticInnerClass.java @@ -28,6 +28,11 @@ import org.junit.Test; */ public class StaticInnerClass { + static boolean Paddy; + public static void main(String args[]){ + System.out.println(Paddy); + } + @Test public void test(){ Outer2.Inner in= new Outer2.Inner(); //4) diff --git a/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/string/Equal.java b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/string/Equal.java index f3c7d36..5ef5a46 100644 --- a/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/string/Equal.java +++ b/Big_data_example/java_learning/src/main/java/com/markilue/java_learning/string/Equal.java @@ -7,18 +7,17 @@ import org.junit.Test; * @BelongsPackage: com.markilue.java_learning.string * @Author: dingjiawen * @CreateTime: 2022-09-13 18:45 - * @Description: - * TODO 解释string中的==和equal方法,以及string的intern()方法: - * 1)String类型不是基本类型,其构造方法有String s=“”;new String()/new String("")/new String(char[] a)等 - * 2)String由于其不是基本类型,因此使用构造方法new String(“abc”)创建对象,其对象会放在堆中(对象引用放在栈里),"abc"存放在对象的value数组中(源码可知) - * 3)使用String s=“abc”创建的String,由于“abc”是一个不可变常量(在常量池中只会维护一份,并且可以共享),因此"abc"会存在常量池中,s的对象引用也是指向常量池 - * 4) String调用的equal()方法,本身是调用了Object类的equal()方法比较内存,但是String类重写了equal()方法,变成了比较值 - * 4.1)String的intern()方法就是将string放入常量池中,并返回他的索引,如果在常量池中则直接返回他的索引 - * 5)关于拼接和存储问题: - * (1)常量+常量:结果是常量池 - * (2)常量与变量 或 变量与变量:结果是堆 - * (3)拼接后调用intern方法:结果在常量池 - * (4)在初始化时使用String s=new String("abc")+new String("def")进行拼接时,不会马上解析,只有当这个字面量s被调用或者abcdef被调用时,采用创建对应的String实例 + * @Description: TODO 解释string中的==和equal方法,以及string的intern()方法: + * 1)String类型不是基本类型,其构造方法有String s=“”;new String()/new String("")/new String(char[] a)等 + * 2)String由于其不是基本类型,因此使用构造方法new String(“abc”)创建对象,其对象会放在堆中(对象引用放在栈里),"abc"存放在对象的value数组中(源码可知) + * 3)使用String s=“abc”创建的String,由于“abc”是一个不可变常量(在常量池中只会维护一份,并且可以共享),因此"abc"会存在常量池中,s的对象引用也是指向常量池 + * 4) String调用的equal()方法,本身是调用了Object类的equal()方法比较内存,但是String类重写了equal()方法,变成了比较值 + * 4.1)String的intern()方法就是将string放入常量池中,并返回他的索引,如果在常量池中则直接返回他的索引 + * 5)关于拼接和存储问题: + * (1)常量+常量:结果是常量池 + * (2)常量与变量 或 变量与变量:结果是堆 + * (3)拼接后调用intern方法:结果在常量池 + * (4)在初始化时使用String s=new String("abc")+new String("def")进行拼接时,不会马上解析,只有当这个字面量s被调用或者abcdef被调用时,采用创建对应的String实例 * @Version: 1.0 */ public class Equal { @@ -103,10 +102,24 @@ public class Equal { //参考5)的第4点 String s1 = new String("mark") + new String("ilue"); //这一步会将mark和ilue放入常量池中 s1.intern(); //这里拼接的字符串markilue被调用,将markilue放入常量池中,这时才返回markilue索引给s1 - String s2=new StringBuilder("marki").append("lue").toString(); //这里将marki和lue放入常量池中,然后在toString中被调用,所以创建markilue的String对象(存放在堆中),然后返回这个堆索引 + String s2 = new StringBuilder("marki").append("lue").toString(); //这里将marki和lue放入常量池中,然后在toString中被调用,所以创建markilue的String对象(存放在堆中),然后返回这个堆索引 System.out.println(s1 == s2);//false 这里一个是返回的在堆对象中的索引,一个是返回的在常量池中的索引,因此不相等 System.out.println(s1 == s2.intern());//true 这里调用intern()方法后获取到了在常量池中的索引,因此两者相等 } + + //面试题 + private static final String MESSAGE = "taobao"; + @Test + public void test08() { + String a = "tao" + "bao"; + String b = "tao"; + String c = "bao"; + System.out.println(a == MESSAGE); //true + System.out.println((b + c) == MESSAGE); //false + + } + + }