关于java中的字符串

1,字符串比较相等

2,取字符串的子串

3,字符数组与字符串的相互转化

4,判断字符串中某个字符是否是汉字


1,、字符串的比较

最常见的是equals 和==

(1)boolean equals(Obfect  str);

boolean equalsIgnoreCase(String str);  只是大小写的区别

(2)但是equals和==却有着本质的不同:只要字符串中的字符是相同的(长度、内容),那么equals就返回true; 但是对于==,必须是当两个引用是指向相同的对象实例时(等号左右的两个变量是否指向同一内存地址),才返回true。可以得出,如果满足== , 则一定满足equals,但是如果equals为真,==不一定为真(因为仅仅是字面上的相等)。

 即:== 是判断严格相等;equals只是表面相等。

注意:

对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址。

“equals()”比较字符串中所包含的内容是否相同


(3)一个具体的例子

public class mystring {
  public static void main(String args[])
  {
 String s1="abc";
 String s2=s1;
 String s5="abc";
 String s3=new String("abc");
 String s4=new String("abc");
 System.out.println("s1==s5: "+(s1==s5));
 System.out.println("s1==s2: "+(s1==s2));
 System.out.println("s1.equals(s2):"+s1.equals(s2));
 System.out.println("s3==s4: "+(s3==s4));
 System.out.println("s1.equals(s4):"+s1.equals(s4));
 System.out.println("s3.equals(s4):"+s3.equals(s4));
 
  }
}
输出结果为:(这一点同c++是特别像的)

s1==s5: true                                //因为s1,s5中的字符串都是放在常量池中,在内存中只要一份副本(对于值相同的String常量,在常量池中只会创建一个)
s1==s2: true
s1.equals(s2):true
s3==s4: false                             //两次new,肯定是两个不同的对象,放在了内存的heap区
s1.equals(s4):true
s3.equals(s4):true 

(4)再一个具体的例子,用到了intern()方法(结果就大不相同哦)

public class teststring {
public static void main(String args[]){


 String s1=new String("aaa777");
 s1=s1.intern();
 String s2="aaa777";
 System.out.println(s1==s2);
}
}

输出为:true;

当调用intern方法时,如果String POOL中已经包含一个等于(用equals(Object)方法确定)此string对象的字符串,则返回池中的字符串,否则,将此String对象添加到池中,并返回此String对象在string pool中的引用。由于执行了s1=s1.intern();会使S1指向String pool中值为”aaa777“的字符串对象,s2也指向了同样的对象,所以结果为true.

2,取子串的函数

String substring(int startIndex, int endIndex);

两个参数为开始下标和结束下标,第二个参数可省略(到字符串结束),两个下标是前包括,后不包括。

3.字符数组与字符串的相互转化

(1)其中,Stringy类有一个构造函数是利用了字符数组,

String(char [ ]value);

String(char [ ]value,int offset,int count);  //第二个参数为开始下标,第三个参数为字符个数

所以,字符数组转化成字符串可以用,

char ch[]={'h','e','l','l','o'};

String ss=new String(char); 或另一种带三个参数的。

(2)当字符串向字符数组转化时,可以用字符串的一个函数char []  toCharArray()

String ss="hello";

char ch[]=new char[20];

ch=ss.toCharArray();   //或直接char ch[]=ss.toCharArray();

4

判断字符串中某个字符是否是汉字,如果为汉字,则字节为两个字节;如果为字母和数字等,则为一个字节。可先取出某字符,封装成字符串,调用字符串的函数,转化成字节数组,再求长度看是否为2.

String ss="南京nj";

char c=ss.charAt(0);

String s2=String.valueOf(c);

int len=s2.getBytes().length;

if(len==2)  System.out.println("is Chinese");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值