复杂的事情要简单做;   简单的事情要认真做;   认真的事情要重复做;   重复的事情要创造性地做。

信心 恒心 决心 创意 乐意

も军魂ミ 心系java

Java的魅力:跨平台、动态的Web、Internet计算 Java在Web、移动设备以及云计算方面前景广阔 我的java编程不是梦!!! 俗话说的好:“授人以鱼不如授人以渔”.
posts - 10, comments - 12, trackbacks - 0, articles - 5
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

浅谈java中String类

Posted on 2010-11-08 14:41 セ军魂ミ 阅读(2551) 评论(0)  编辑  收藏

String:

              java中的字符串。 String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。 String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的这样的话把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,
 String  s1 = "abc";  
    String  s2= "def";   
    String  s2 = s1;

 //这样操作之后s1是"abc",s2也是"abc".

           String 有两种赋值方式:直接赋值:String  s1 = "abc"; 
                                                   ②用new开辟空间:String str1 = new String(“abc”) ;

      区别:①先看下面这个程序,看结果是否相等
                public static void main(String args[]) {
                            //都是采用直接赋值的方式
                            String str1 = "abc";
                            //String能否采用new的方式赋值呢?
                            String str2 = new String("abc");
                            String str3 = str2;
                            System.out.println(str1);
                            System.out.println(str2);
                            //String该如何比较是否相等呢
                            System.out.println(str1==str2);
                            System.out.println(str2==str3);
                          }

运行结果:abc
                   abc
                   false
                   true

出现上述运行结果的原因: “==”如果直接应用在字符串上进行比较,则表示比较的是内存地址的值。在
 String str1="abc";证明栈内存中有个str1,在堆内存中的内容就是abc,只会产生一个对象;而在String str1 = new String(“abc”) ;代码中我们知道“abc”是匿名对象,那么在堆内存中就会有块空间是“abc”,紧接着new String("abc") 使用new在堆内存中又开辟了一个空间“abc”,最后String str1 = new String("abc") ;代码将最后生成的“abc”内存地址指向str1,最早的一个“abc”就没使用上。 即使用new 关键字开辟,则会产生两个对象 。
  


           ②直接赋值法,在堆内存中只会产生一个对象,而用new开辟空间法,最后在堆内存中是产生了两个对象。

          String str1="abc";                                                                                                                 

 
String str1 = new String("abc") ;




          String 类提供的成员执行以下操作有:比较 String 对象;返回 String 对象内字符或字符串的索引;复制 String 对象的值;分隔字符串或组合字符串;修改字符串的值;将数字、日期和时间或枚举值的格式设置为字符串;对字符串进行规范化。
             使用 Compare、CompareOrdinal、CompareTo、Equals、EndsWith 和 StartsWith 方法进行比较。                                                
                使用  IndexOf、IndexOfAny、LastIndexOf 和 LastIndexOfAny 方法可获取字符串中子字符串或 Unicode 字符的索引。
                使用 Copy 和 CopyTo 可将字符串或子字符串复制到另一个字符串或 Char 类型的数组。
             使用 Substring 和 Split 方法可通过原始字符串的组成部分创建一个或多个新字符串;
                使用 Concat 和 Join 方法可通过一个或多个子字符串创建新字符串。
                使用 Insert、Replace、Remove、PadLeft、PadRight、Trim、TrimEnd 和 TrimStart 可修改字符串的全部或部分。 
                使用 ToLower、ToLowerInvariant、ToUpper 和 ToUpperInvariant 方法可更改字符串中 Unicode 字符的大小写。 
                使用 Format, 可将字符串中的一个或多个格式项占位符替换为一个或多个数字、日期和时间或枚举值的文本表示形式。
                使用 Length 属性可获取字符串中 Char 对象的数量;使用 Chars 属性可访问字符串中实际的 Char 对象。
                使用 IsNormalized 方法可测试某个字符串是否已规范化为特定的范式。使用 Normalize 方法可创建规范化为特定范式的字符串。

   

          "=="与equals的区别:“==”表示比较的是内存地址的值
                                                  equals表示比较两个字符串的内容是否相等

若把上面的程序改为如下程序,再看运行结果是什么:
   public static void main(String args[]) {
                            //都是采用直接赋值的方式
                            String str1 = "abc";
                            //String能否采用new的方式赋值呢?
                            String str2 = new String("abc");
                            String str3 = str2;
                            System.out.println(str1);
                            System.out.println(str2);
                            //String该如何比较是否相等呢
                            System.out.println(str1.equals(str2);
                            System.out.println(str2.equals(str3);
                          }
  
运行结果:abc
                   abc
                   true
                   true


总结:这些就是我对java中String类的初步认识,希望能给大家带来一定的帮助,若有什么不对的,也希望大家给与提出建议,我也从中学习、体会,谢谢!

只有注册用户登录后才能发表评论。


网站导航: