1.复习课件,总结String、Object、包装类的常用方法以及注意点,更新到博客,把更新后的地址写到作业里。
String类
两张实例化方式
1、直接赋值 string str=“hello”推荐使用 直接入池 产生一块堆内存
2、构造方法
new操作 string str=new(“hello”)
字符串相等str.equals(str1)比较的是内容 默认区分大小写
所有的字符串常量是string类的匿名对象 保存在堆内存中
以后再进行指定字符串是否与用户输入字符串相等比较时请将制定字符写在前面比较 ,来避免空指针异常
4、string的两种实例化区别:
如果直接赋值 则jvm底层会自动维护一个对象池 叫字符串的而对象池那么该对象会自动保存在对象池中如果下次
继续采用直接赋值的方式创建string对象会首先比较这个对象池只会中有没有指定内容,若有将直接饮用引用,如果没有指定内容对象,
则开辟新的空间容纳字符串对象而后自动保存在池中,以便下次使用
String str1 = "hello" ; 在池中
String str2 = "hello" ;
String str3 = "hello" ; 保存同一块地址
new string
1、采用构造方法实例化对象:每当你采用构造方法创建string类实例化对象时每new一个在堆上开辟两块空间,一块是垃圾空间
2、采用构造方法产生的字符串对象不会自动入池
3、string提供手工入池操作 intern()方法
*********
字符串常量不可biangeng变更:
1、定义字符串常量时内容不可变更(变得是引用)
原来的字符串不改变 引用在变 而不是里面的对象(产生垃圾空间 服务器搞挂){str+=“hello”}
2、使用字符串时尽量少变更(+操作最多执行三次)
3、jvm底层会将string'变成stringbuilder()底层优化
2.编程题:
要求:
1).Person类有name,age,salary属性,要求实现至少两个构造方法,并且属性私有,提供对应的getter、setter。
2).覆写toString方法,要求在System.out.println()函数中传递Person对象能打印出三个属性值而不是对象地址。
3).覆写equals方法,要求两个Person类对象的值相同时返回true。
package one;
class Person{
String name;
int age;
int salary;
private Person(){
}
private Person(int n){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
public class Test {
}
3.说出下列程序的执行结果,并说明原因:
Integer a = 55;
Integer b = 55;
System.out.println(a==b);
System.out.println(a==new Integer(55));
System.out.println(a.equals(new Integer(55)));
Integer c = 129;
Integer d = 129;
System.out.println(c==d);
4.写出懒汉式单例模式
5.(算法)
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,
又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。