java基础一些面试题学习
This commit is contained in:
parent
2bb7fa65b8
commit
16865a08b6
|
|
@ -16,6 +16,7 @@ import org.junit.Test;
|
||||||
* 4.如果枚举类需要的是有参构造,需要手动定义private的有参构造,调用有参构造的方法就是在常量对象名后面加(实参列表)就可以。
|
* 4.如果枚举类需要的是有参构造,需要手动定义private的有参构造,调用有参构造的方法就是在常量对象名后面加(实参列表)就可以。
|
||||||
* 5.枚举类默认继承的是java.lang.Enum类,因此不能再继承其他的类型。
|
* 5.枚举类默认继承的是java.lang.Enum类,因此不能再继承其他的类型。
|
||||||
* 6.JDK1.5之后switch,提供支持枚举类型,case后面可以写枚举常量名。
|
* 6.JDK1.5之后switch,提供支持枚举类型,case后面可以写枚举常量名。
|
||||||
|
* 7.enumeration是线程安全的
|
||||||
* 2)枚举类的常用方法:
|
* 2)枚举类的常用方法:
|
||||||
* 1.toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法!
|
* 1.toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法!
|
||||||
* 2.name():返回的是常量名(对象名) 【很少使用】
|
* 2.name():返回的是常量名(对象名) 【很少使用】
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,11 @@ import org.junit.Test;
|
||||||
*/
|
*/
|
||||||
public class StaticInnerClass {
|
public class StaticInnerClass {
|
||||||
|
|
||||||
|
static boolean Paddy;
|
||||||
|
public static void main(String args[]){
|
||||||
|
System.out.println(Paddy);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test(){
|
public void test(){
|
||||||
Outer2.Inner in= new Outer2.Inner(); //4)
|
Outer2.Inner in= new Outer2.Inner(); //4)
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,17 @@ import org.junit.Test;
|
||||||
* @BelongsPackage: com.markilue.java_learning.string
|
* @BelongsPackage: com.markilue.java_learning.string
|
||||||
* @Author: dingjiawen
|
* @Author: dingjiawen
|
||||||
* @CreateTime: 2022-09-13 18:45
|
* @CreateTime: 2022-09-13 18:45
|
||||||
* @Description:
|
* @Description: TODO 解释string中的==和equal方法,以及string的intern()方法:
|
||||||
* TODO 解释string中的==和equal方法,以及string的intern()方法:
|
* 1)String类型不是基本类型,其构造方法有String s=“”;new String()/new String("")/new String(char[] a)等
|
||||||
* 1)String类型不是基本类型,其构造方法有String s=“”;new String()/new String("")/new String(char[] a)等
|
* 2)String由于其不是基本类型,因此使用构造方法new String(“abc”)创建对象,其对象会放在堆中(对象引用放在栈里),"abc"存放在对象的value数组中(源码可知)
|
||||||
* 2)String由于其不是基本类型,因此使用构造方法new String(“abc”)创建对象,其对象会放在堆中(对象引用放在栈里),"abc"存放在对象的value数组中(源码可知)
|
* 3)使用String s=“abc”创建的String,由于“abc”是一个不可变常量(在常量池中只会维护一份,并且可以共享),因此"abc"会存在常量池中,s的对象引用也是指向常量池
|
||||||
* 3)使用String s=“abc”创建的String,由于“abc”是一个不可变常量(在常量池中只会维护一份,并且可以共享),因此"abc"会存在常量池中,s的对象引用也是指向常量池
|
* 4) String调用的equal()方法,本身是调用了Object类的equal()方法比较内存,但是String类重写了equal()方法,变成了比较值
|
||||||
* 4) String调用的equal()方法,本身是调用了Object类的equal()方法比较内存,但是String类重写了equal()方法,变成了比较值
|
* 4.1)String的intern()方法就是将string放入常量池中,并返回他的索引,如果在常量池中则直接返回他的索引
|
||||||
* 4.1)String的intern()方法就是将string放入常量池中,并返回他的索引,如果在常量池中则直接返回他的索引
|
* 5)关于拼接和存储问题:
|
||||||
* 5)关于拼接和存储问题:
|
* (1)常量+常量:结果是常量池
|
||||||
* (1)常量+常量:结果是常量池
|
* (2)常量与变量 或 变量与变量:结果是堆
|
||||||
* (2)常量与变量 或 变量与变量:结果是堆
|
* (3)拼接后调用intern方法:结果在常量池
|
||||||
* (3)拼接后调用intern方法:结果在常量池
|
* (4)在初始化时使用String s=new String("abc")+new String("def")进行拼接时,不会马上解析,只有当这个字面量s被调用或者abcdef被调用时,采用创建对应的String实例
|
||||||
* (4)在初始化时使用String s=new String("abc")+new String("def")进行拼接时,不会马上解析,只有当这个字面量s被调用或者abcdef被调用时,采用创建对应的String实例
|
|
||||||
* @Version: 1.0
|
* @Version: 1.0
|
||||||
*/
|
*/
|
||||||
public class Equal {
|
public class Equal {
|
||||||
|
|
@ -103,10 +102,24 @@ public class Equal {
|
||||||
//参考5)的第4点
|
//参考5)的第4点
|
||||||
String s1 = new String("mark") + new String("ilue"); //这一步会将mark和ilue放入常量池中
|
String s1 = new String("mark") + new String("ilue"); //这一步会将mark和ilue放入常量池中
|
||||||
s1.intern(); //这里拼接的字符串markilue被调用,将markilue放入常量池中,这时才返回markilue索引给s1
|
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);//false 这里一个是返回的在堆对象中的索引,一个是返回的在常量池中的索引,因此不相等
|
||||||
System.out.println(s1 == s2.intern());//true 这里调用intern()方法后获取到了在常量池中的索引,因此两者相等
|
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
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue