黑马程序员技术交流社区
标题: JAVA 基础班Day12 Day13面试题 [打印本页]
作者: jacobsnow 时间: 2016-4-28 22:01
标题: JAVA 基础班Day12 Day13面试题
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取值范围就会再新创建对象
向毛主席保证,好好学习……
作者: Wanibal 时间: 2016-4-28 22:32
质量呢,原创呢
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |