A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jacobsnow 中级黑马   /  2016-4-28 22:01  /  445 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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取值范围就会再新创建对象




向毛主席保证,好好学习……


1 个回复

倒序浏览
质量呢,原创呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马