标签:
今天是2016年,5月10日,java学习第七天!
一、P104 String 类
两种不同的对象实例化方式
1、采用直接赋值字符串的形式为String类对象实例化;
如:String str="Hello",
2、采用String类的构造方法为String类的对象实例化,String 类的构造为:public String(String str)
如:String str =new String("String")
字符串的比较
String类中"=="和"equals()"的区别?
1、==:比较的是两个字符串内存地址的数值是否相等,属于数值比较;
2、equals():比较的是两个字符串的内容,属于内容比较。
注:字符串常量本身是一个String类的匿名对象。什么是匿名对象?前面已经讲过,匿名对象就是指没有栈内存指向的堆内存空间,就是一个匿名对象。
这里还讲到一个关于编译器优化的问题,比如String s="aa"+"bb"+"cc"在我们看来是占用了3个堆内存空间,但是经过编译器优化过后,就变成String s="aabbcc",从而会节省空间,这也是Java高级语言的神奇之处。
String类两种实例化方式的区别
直接赋值:String str=“Hello”;
如果String str1=“Hello”;
String str2=“Hello”;
String str3=“Hello”;
那么str1==str2==str3;
直接赋值操作中字符串都相同的原因:直接赋值会将字符串的内容放入到池中,以供其他继续使用直接赋值方式的String对象使用,如果新声明的字符串内容不再池中时,则会开辟一个新的,继续放入池中,以供下次使用。也就是说上面的3个String类,str1 str2 str3指向的是一个堆内存,这个堆内存中存的是“Hello”。
构造方法赋值:String str=new String("Hello")
因为每一个字符串都是一个String类的匿名对象,所以首先会在堆内存中开辟一块空间保存字符串“Hello”,而后又使用了关键字new,开辟了另一块堆内存空间,不过真正使用的是用关键字new开辟的堆内存,而之前定义的字符串常量的堆内存空间将不会有任何的栈内存指向,就会成为垃圾,等待被GC回收。所以在使用构造方法赋值时,实际上创建了两个String类的实例化对象。
通过比较,在日后的所有开发中,String对象的实例化永远都采用直接赋值的方式完成。
二、P112 String类的常用方法。
这主要是通过JAVA Doc 文档找到String类中所定义的全部方法,并学习。
test1:
代码:
package com.cqvie.test;
public class Test1 {
public static void main(String[] args) {
String s="how are you";
int t=s.length();
System.out.println(t);
}
}
输出:
11
这就是一个求字符串长度的String类,通过方法public int length()求出字符串s的长度。
test2:
代码:
package com.cqvie.test;
public class Test2 {
public static void main(String[] args) {
String t="今天天气很好";
int y=t.lastIndexOf("天气");
System.out.println(y);
}
}
输出:
2
这是一个 public int lastIndexOf(String str),表示从后向前查找字符串的位置,找不到返回-1。
test3:
代码:
package com.cqvie.test;
//从指定位置向后查找字符串的位置
public abstract class Test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String t="昨天今天明天后天";
int s=t.indexOf("天",0);
int r=t.indexOf("天",s+1);
System.out.println(s);
System.out.println(r);
}
}
输出:
1
3
这个方法名称是:public int indexOf(String str,int fromIndex) 由指定位置向后查找字符串位置,找不到返回=-1。
test4:
代码:
package com.cqvie.test;
public class Test4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="国事家事天下事事事关心";
int n=5;
int t=-1;
for(int i=0;i<n;i++){
t=s.indexOf("事",t+1);
}
System.out.println(t);
}
}
输出:
8
这个方法和上一个方法是一样的,即从指定位置向后查找字符串的位置。这个题不相同的是,找到第n个字符串在s中的位置,如本题,找到第五个“事”在s中的位置为8.
需要注意t的初值应为-1,这样才会从第一个字符开始查找。
标签:
原文地址:http://www.cnblogs.com/hyyq/p/5479680.html