码迷,mamicode.com
首页 > 编程语言 > 详细

java学习第七天

时间:2016-05-10 23:31:40      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:

 

今天是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,这样才会从第一个字符开始查找。

 

java学习第七天

标签:

原文地址:http://www.cnblogs.com/hyyq/p/5479680.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!