黑马程序员_java常用API之String

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

Blog_8_1字符串

(1) 定义:由多个字符组成的一串数据,字符串的实质是字符数组。

(2) String的构造方法:

      A:String s = new String();

      B:String s = new String(byte[] bys);

      C:String s = new String(byte[] bys,int index,int count);

      D:String s = new String(char[] chs);

      E:String s = new String(char[] chs,int index,int count);

      F:String s = new String(String str);

      G:String s = "hello";

注意:由上可知字节数组和字符数组都可以通过构造方法转换为字符串

Blog_8_2String s=new String("hello") 和String s="hello"的区别

String s=new String(“hello”);在赋值过程中创建了两个对象、而String S=”hello”;在赋值过程中只创建了一个对象,下面分别画图来分析两种不同的方式赋值的过程。

(1)    String s=”hello”;的赋值过程图解

首先,在栈中为s变量开辟了一个空间;然后在常量池中先把“hello”还原成一个个不重复的字符并储存,如上图由于l重复了,故只能储存一次。然后再在常量池中开辟另外一个空间,这个空间在从上一个空间中获取一个个字符,并还原成hello存储在这个新开辟的空间里面,再把此空间地址赋值给栈中s。

(2)    String s=new String(“hello”);的赋值过程图解

1.      首先,在栈中为s变量开辟了一个空间;

2.      由于语句中出现了new关键字,所以在堆内存中开辟了一个空间。

3.      在常量池开辟一个空间构造hello,并产生一个地址值(到此步骤完全和String s=”hello”一样);

4.      然后把常量池产生的地址值赋值到堆内存中开辟的空间里面;

5.      最后把堆内存中的地址值赋值给变量s。

由此可见,String s=new String(“hello”);在内存中产生了两个对象。上述步骤可

用下面的图表示:

有了上面的概念,下面一些常见的疑惑就很容易解决了:

String s1=new String("hello");

      String s2=new String("hello");

      System.out.println(s1==s2);//fasle

//由于new关键字出现了两次,s1和s2是两个不同的对象,故堆中的空间//地址值不一样

      System.out.println(s1.equals(s2));//true

      //此处比较的是字符串的内容,那肯定一样啊

 

      String s3=new String("hello");

      String s4="hello";

      System.out.println(s3==s4);//fasel

      // S3的地址值是堆内存中的地址值,而s4是方法区中的地址值,当然不//一样了

      System.out.println(s3.equals(s4));//true

      //String重写了equals()方法,比较的是内容,肯定一样

 

      String s5="hello";

      String s6="hello";

      System.out.println(s5==s6);//true

    System.out.println(s5.equals(s6));//true

//在方法区中都是从第一个空间中重构出来,如果系统发现重构的一样就直//接引用之前出现过的,故地址值当然相同了。

(3)关于字符串一旦被赋值就不能被改变的理解

可以通过下面例子来理解:

String s=”hello”;

s+=”world”;

由于字符串实质是字符数组,故当定义好一个字符串时就对应的产生了一个定长字符数组时,上面例子的过程其实是:

1.      为”world”分配一个存储空间并存储;

2.      用”hello”和”world”拼接成”helloworld”并存入系统提供的能存储”helloworld”的字符数组中,然后把此字符数组的地址赋值给s.

Blog_8_3常见功能

(1)判断功能

boolean equals(Object obj)判断个两个字符串是否一样

boolean equalsIgnoreCase(String str)忽率大小写判断两个字符串是否一样

boolean contains(String str)判断一个字符串中是否包含字符串str,则返回 true,否则返回 false

boolean startsWith(String str)判断一个字符串是否是以一个小字符串开头。

boolean endsWith(String str)判断一个字符串是否是以一个字符串结尾。

boolean isEmpty()当字符为空时返回true;当String a="";返回true

(2)获取功能

int length()获取字符串的字符长度;

char charAt(int index)返回字符串中指定索引值的字符

int indexOf(int ch)返回在此字符串中第一次出现指定字符处的索引。

int indexOf(String str);回指定子字符串在此字符串中第一次出现处的索引。

int indexOf(int ch,int fromIndex) 返回指定子字符在此字符串中第一次出现处的索引

int indexOf(String str,int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引

String substring(int start)返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。

String substring(int start,int end)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。

(3)转换功能

byte[] getBytes() 把字符串转换到相应的数组中去。

char[] toCharArray()将此字符串转换为一个新的字符数组

static String copyValueOf(char[] chs)将字符串转化为字符数组

static String valueOf()可以将任意类型的转化为字符串

String toLowerCase()将字符串中字符全部转换为小写

String toUpperCase()将字符串中字符全部转换为大写

String concat(String str) 将指定字符串连接到此字符串的结尾

(4)其他功能

String replace(char old,char new)替换字符串中的一个字符

String replace(String old,String new)替换字符串中的一个子字符串

String trim()返回字符串的副本,忽略前导空白和尾部空白

int compareTo(String str)按字典顺序比较两个字符串。

int compareToIgnoreCase(String str) 忽律大小写按字典顺序比较两个字符串

 

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值