博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String
阅读量:6160 次
发布时间:2019-06-21

本文共 5867 字,大约阅读时间需要 19 分钟。

String
的比较问题:
       
· String
是一个系统提供好的类,但是String
可以像基本数据类型那样,直接赋值
       
· String
还可以通过new
关键字赋值
 
public class OODemo12{
         public static void main(String args[]){
                   String str1 = "abc" ;
                   String str2 = new String("abc") ;
                   String str3 = str2 ;
         }
};
 
那么该如何去比较两个字符串是否相等呢?
· 
按照“==
”的方式进行比较
public class OODemo12{
         public static void main(String args[]){
                   String str1 = "abc" ;
                   String str2 = new String("abc") ;
                   String str3 = str2 ;
                   System.out.println(str1==str2) ;    // false
                   System.out.println(str1==str3) ;    // false
                   System.out.println(str3==str2) ;    // true
         }
};
 
       
比较之后发现,虽然str1
str2
的内容是一样,但是通过==
比较之后,结果均为“false
”,而str2
str3
的比较结果均为“true
”。
       
如果使用了“==
”,则最终的比较结果是比较的两个地址。
· 
最终应该比较的是两个字符串的内容,所以此时,就必须使用String
类中提供好的一个方法:
       public boolean equals(String str)
public class OODemo13{
         public static void main(String args[]){
                   String str1 = "abc" ;
                   String str2 = new String("abc") ;
                   String str3 = str2 ;
                   System.out.println(str1.equals(str2)) ;    // true
                   System.out.println(str1.equals(str3)) ;    // true
                   System.out.println(str3.equals(str2)) ;    // true
         }
};
使用equals
方法比较的是两个字符串的内容。
 
注意点1
       
实际上一个字符串就是String
类的匿名对象。
       
每一个字符串都会在堆内存中开辟空间。
              String str1 = "abc" ;
       
· 
首先要在堆内存中开辟一个空间,此空间存放的是“abc
”的字符串,之后把此字符串的地址使用给了str1
System.out.println("abc".equals(str2)) ;
 
注意点2
       String
有两种实例化方式
       
· 
直接赋值
       
· 
使用new
关键字开辟
       
以上两种方式使用那种更好呢?
       
· 
直接赋值:它本身只会产生一个实例化对象
public class OODemo14{
         public static void main(String args[]){
                   String str1 = "abc" ;
         }
};
       
· 
使用new
关键字开辟,会产生两个实例化对象
public class OODemo14{
         public static void main(String args[]){
                   String str1 = new String("abc") ;
         }
};
使用直接赋值的方式比较节约空间,所以绝对不要使用new
关键字实例化对象。
 
注意点3
       
· String
中的内容一旦声明则不可改变
       String
的内容是固定的,如果要改变其内容,修改的是其内存的指向。
 
public class OODemo14{
         public static void main(String args[]){
                   String str1 = "abc" ;
                   str1 += "bcd" ;
                   System.out.println(str1) ;
         }
};
 
 
注意点4
       
对于一个字符串而言,在JAVA
中属于共享设计模式的应用,即:如果一个字符串已经被另外一个字符串所引用,则以后如果声明的字符串内容相同,则不会再重新声明。
public class OODemo15{
         public static void main(String args[]){
                   String str1 = "abc" ;
                   String str2 = "abc" ;
                   System.out.println(str1==str2) ;
         }
};
 
注意点5
       
以下的程序代码绝对不要出现,出现之后会影响系统的性能。
public class OODemo28{
         public static void main(String args[]){
                   String str1 = "a" ;
                   for(int i=0;i<100;i++){
                            str1 += i ;
                   }
                   System.out.println(str1) ;
         }
};
       
如果按以上的形式编写代码,则String
的内存指向(断开和重新连接)需要进行100
次,性能肯定低。所以此种语句在开发中绝对不允许出现。
实际上String
类还存在着大量的系统提供好的方法
1
  
取得字符串长度的方法
       public int length()   
à 
取出字符串的长度
public class OODemo16{
         public static void main(String args[]){
                   String str1 = "abcfdafdsadafsdfdssdfa" ;
                   System.out.println(str1.length()) ;
         }
};
 
2
  
将字符串变为一个字符数组
public class OODemo17{
         public static void main(String args[]){
                   String str1 = "abcfdafdsadafsdfdssdfa" ;
                   char c[] = str1.toCharArray() ;
                   for(int i=0;i<c.length;i++){
                            System.out.print(c[i]+"\t") ;
                   }
         }
};
 
3
  
将一个字符数组变为字符串
       public 
String(char[] value)
public class OODemo18{
         public static void main(String args[]){
                   char c[] = {'a','b','c','d','e'} ;
                   System.out.print(new String(c)) ;
         }
};
 
4
  
判断在一个字符串中是否包含一个一个指定的字符串
       public int indexOf(String str) ;
如果查到了则返回位置,否则返回-1
public class OODemo19{
         public static void main(String args[]){
                   String str = "ABCDEFG" ;
                   System.out.println(str.indexOf("ABC")) ;
                   if(str.indexOf("ABC")!=-1){
                            System.out.println("
查到了指定内容。
") ;
                   }else{
                            System.out.println("
没有查到指定内容。
") ;
                   }
         }
};
 
5
  
按照位置截取一定长度的字符串
       public String substring(int beging,int end)
public class OODemo20{
         public static void main(String args[]){
                   String str = "ABCDEFG" ;
                   System.out.println(str.substring(0,3)) ;
         }
};
 
6
  
如以下的字符串:“A:B:C
”,按照“:
”进行字符串拆分
       public String[] split(String str) ;
public class OODemo21{
         public static void main(String args[]){
                   String str = "A:B:C" ;
                   String s[] = str.split(":") ;
                   for(int i=0;i<s.length;i++){
                            System.out.println(s[i]) ;
                   }
         }
};
 
7
  
将“Hello World!!!
”字符串中的“o
”替换成“x
       public String replace(String str)
public class OODemo22{
         public static void main(String args[]){
                   String str = "hello world!!!" ;
                   System.out.println(str.replace("o","x")) ;
         }
};
 
8
  
判断一个字符串是否是以“**
”开头或结尾。
       
以指定的字符串开头:public boolean startsWith(String str)
       
以指定的字符串结尾:public boolean endsWith(String str)
public class OODemo23{
         public static void main(String args[]){
                   String str = "**hello**" ;
                   System.out.println(str.startsWith("**")) ;
                   System.out.println(str.endsWith("**")) ;
         }
};
 
9
  
给定以下字符串:“MIKE:70|JONES:80|TOM:75
       
要求拆分成以下格式:
              
· MIKE       
à    70
              
· JONES     
à    80
              
· TOM        
à   75
public class OODemo24{
         public static void main(String args[]){
                   String str = "MIKE:70|JONES:80|TOM:75" ;
                   System.out.println("\"\'\\") ;
                   // 
拆分两次
                   String s1[] = str.split("\\|") ;
                   for(int i=0;i<s1.length;i++){
                            String s2[] = s1[i].split(":") ;
                            System.out.println(s2[0]+" --> "+s2[1]) ;
                   }
         }
};
 
10
、取出字符串“Hello world
”中的第三个字符
       public char charAt(int ind) ;
public class OODemo25{
         public static void main(String args[]){
                   String str = "helwo" ;
                   System.out.println(str.charAt(2)) ;
         }
};
 
11
、一个指定的字符数组,将其中指定位置的字符变为字符串
public String(char[] value, int offset, int count)
public class OODemo26{
         public static void main(String args[]){
                   char c[] = {'h','e','l','w','o'} ;
                   System.out.println(new String(c,1,3)) ;
         }
};
 
12
、如何可以进行不区分大小写的比较?
       public boolean equalsIgnoreCase(String str)
public class OODemo27{
         public static void main(String args[]){
                   String str1 = "abc" ;
                   String str2 = "ABC" ;
                   System.out.println(str1.equalsIgnoreCase(str2)) ;
         }
};
 
继续探讨对象的引用传递
       
现在观察以下三道题目,分析其内存空间的指向,并说出结果。
class Demo{
         int x ;
};
public class Demo29{
         public static void main(String args[]){
                   Demo d1 = new Demo() ;
                   d1.x = 30 ;
                   fun(d1) ;
                   System.out.println(d1.x) ;
         }
         public static void fun(Demo d2){
                   d2.x = 50 ;
         }
};
 
 
public class Demo30{
         public static void main(String args[]){
                   String str = "abc" ;
                   fun(str) ;
                   System.out.println(str) ;
         }
         public static void fun(String s){
                   s = "bcd" ;
         }
};
class Demo{
         String name ;
};
public class Demo31{
         public static void main(String args[]){
                   Demo d = new Demo() ;
                   d.name = "abc" ;
                   fun(d) ;
                   System.out.println(d.name) ;
         }
         public static void fun(Demo x){
                   x.name = "bcd" ;
         }
};
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91235,如需转载请自行联系原作者
你可能感兴趣的文章
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>
js时间和时间戳之间如何转换(汇总)
查看>>
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
查看>>
java中string和int的相互转换
查看>>
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>
解决Eclipse中新建jsp文件ISO8859-1 编码问题
查看>>
7.对象创建型模式-总结
查看>>
【论文阅读】Classification of breast cancer histology images using transfer learning
查看>>
移动端处理图片懒加载
查看>>
jQuery.on() 函数详解
查看>>
谈缓存和Redis
查看>>
【转】百度地图api,根据多点注标坐标范围计算地图缩放级别zoom自适应地图
查看>>
用户调研(补)
查看>>
ExtJS之开篇:我来了
查看>>
☆1018
查看>>
oracle 去掉空格
查看>>
6.13心得
查看>>
Runtime类
查看>>