Day 12 12.05_常见对象(String类的常见面试题) package com.itheima.string; public class Demo3_String{ public static void main(String[] args) { //demo1(); //demo2(); //demo3(); //demo4(); demo5(); }
private static void demo5() { String s1 = "ab"; String s2 = "abc"; String s3 = s1 + "c"; System.out.println(s3 == s2); System.out.println(s3.equals(s2)); | //true |
}
private static void demo4() { //byte b = 3 +4; //在编译时就变成7,把7赋值给b,常量优化机制 String s1 = "a" + "b" + "c";//java中有常量优化机制,在编译时期就能确定s2的值为"abc",所以编译时期,在常量池中创建"abc" String s2 = "abc";//执行到这里时常量池中已经有了"abc",所以就不再创建,所以s1和s2指向的是常量池中同一个字符串常量"abc" System.out.println(s1 == s2); | //true,java中有常量优化机制 | System.out.println(s1.equals(s2)); | //true |
}
private static void demo3() { | //==比较的是地址值 |
String s1 = newString("abc"); //录的是堆内存对象的地址值 String s2 ="abc"; //记录的是常量池中的地址值 System.out.println(s1 == s2); | //false | System.out.println(s1.equals(s2)); | //true |
}
private static void demo2() { //创建几个对象 //创建两个对象,一个在常量池中,一个在堆内存中 String s1 = newString("abc"); System.out.println(s1); }
private static void demo1() { | //常量池中没有这个字符串对象,就创建一个,如果有直接用即可 |
String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); | //==号比较的是地址值,true | System.out.println(s1.equals(s2)); | //比较的是字符串的内容:true |
}
}
Day 13
13.10_常见对象(StringBuffer和StringBuilder的区别) 面试题 String,StringBuffer,StringBuilder的区别 *StringBuffer是jdk1.0版本的,是线程安全的,效率低 *StringBuilder是jdk1.5版本的,是线程不安全的,效率高
String和StringBuffer,StringBuilder的区别 *String是一个不可变的字符序列 *StringBuffer,StringBuilder是可变的字符序列
13.23_常见对象(Integer的面试题) * A:Integer的面试题 看程序写结果
Integeri1 = new Integer(97); Integeri2 = new Integer(97); System.out.println(i1 == i2); | //false | System.out.println(i1.equals(i2)); | //true |
System.out.println("-----------");
Integeri3 = new Integer(197); Integer i4 = new Integer(197); System.out.println(i3 == i4); | //false | System.out.println(i3.equals(i4)); | //true |
System.out.println("-----------");
Integer i5 = 127; Integer i6 = 127; System.out.println(i5 == i6); | //ture | System.out.println(i5.equals(i6)); | //true |
System.out.println("-----------");
Integer i7 = 128; Integer i8 = 128; System.out.println(i7 == i8); | //false | System.out.println(i7.equals(i8)); | //true |
解释:
- == 比较的是地址值 equals重写后比较的是值。(一般都会重写。如果不重写,默认继承Object类,比较的是地址值)
- -128到127是byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取。如果超过了byte取值范围就会再新创建对象
向毛主席保证,好好学习……
|