Java复习笔记11【字符串常用方法2】

来源:互联网 发布:java技术手册 编辑:程序博客网 时间:2024/04/30 23:27
package com.lesson10.example;
/*
 *  二、比较属性
 *   1、string.equals(str) 判断两个字符串是否相等
 *   (1)参数:String
 *  (2)返回值:boolean
 *   2、string.compareTo(str) 比较两个字符串,得到字符串之间的差值
 *  (1)参数:String
 *    (2)返回值:int   两个字符串的差值
 *         0      string==str
 *       >0      string>str
 *       <0      string<str
 *  ---------------------------------------------------
 *  注意:equals和compareTo都区分大小写,如果判断时需要忽略大小写,就使用
 *   equalsIgnoreCase()和compareToIgnoreCase()进行比较
 * */
class Value{ //自定义类,用于EqualsExample中的例子
 int i;
 Object o;
 
 public Value(Object o){
  this.o = o;
 }
}

class EqualsExample{//比较 == 和 equals的用法
 /* 
  * 基本类型比较:只能使用 == ,不能使用equals 
  * */ 
 public void compare1(){ 
  int a = 1; 
  int b = 1; 
  byte c = 1; 
  System.out.println("a == b " + (a == b));// true 
  System.out.println("a == b " + (a == c));// true 
  //System.out.println(a.equals(b));//error,equals不能比较数值型 
 } 
  
 /* 
  * 字符串类型比较(最好使用equals比较) 
  * 1、== 比较变量本身的值,即两个变量在内存中的首地址 
  * 2、equals 比较变量的内容 
  * */ 
 public void compare2(){ 
  String str1 = "abc"; 
  String str2 = "abc"; 
  String str3 = new String("abc"); 
  char a = 'a'; 
  String str4 = a + "bc";//这种方法是不放入字符串池的 
  System.out.println("str1 == str2 " + (str1 == str2));// true 
  // 在JVM内存在字符串池,保存着很多String对象,可以被共享使用 
  //新建"abc"字符串时,系统会先到内存中查找是否存在'a'、'b'、'c',如果存在则直接引用,否则新建 
  //索引str1和str2引用的是同一个字符串 
  System.out.println("str1 == str3 " + (str1 == str3));// false 
  //每new一次分配一块新的内存,是一个新的对象 
  System.out.println("str1 == str4 " + (str1 == str4));// false 
  System.out.println("str1.equals(str2) " + (str1.equals(str2)));// true 
  System.out.println("str1.equals(str3) " + (str1.equals(str3)));// true 
  System.out.println("str1.equals(str4) " + (str1.equals(str4)));// true 
 } 
  
 /* 
  * 对象类型比较 
  * == 和  equals都是判断是否指向同一个对象(如果重写equals方法,则可设置equals比较对象的内容) 
  * */ 
 public void compare3(){ 
  Value v1 = new Value("ab"); 
  Value v2 = new Value("ab"); 
  Value v3 = new Value("abc"); 
  v1.i = v2.i = 100;//v1和v2不是同一个对象,所以v1.i和v2.i也不是同一个变量 
  System.out.println("v1 == v2 " + (v1 == v2));//false 
  System.out.println("v1.equals(v2) " + (v1.equals(v2)));//false 
  //如果在自定义类中设置新的equals方法,则可以用来比较对象的内容。
  //但是Value没有重写equals,所以只能比较地址 
  v3 = v1; //v3执行v1对象,则v3和v1是同一个对象 
  System.out.println("v1 == v3 " + (v1 == v3)); //true 
  System.out.println("v1.equals(v3) " + (v1.equals(v3))); //true 
 } 
}

class CompareExample{//了解compareTo()方法的用法
 /*
  * 【compareTo()方法的比较方法】
  * 1、从两个字符串的第一个字符开始比较,结果为两个字符的ASCII码值的差,如果前一个字符比较的字符差值为0,
  *  再比较下一个字符,依次类推。(如果字符ASCII码的差值不为0,则比较结束,返回该ASCII码差值)
  * 2、如果当其中一个字符串已经结束,还没有比较出大小(即前面所有比较的字符都相同),则返回字符串的长度差
  * ---------------------------------------------------------------
  * 【总结】优先依次比较字符ASCII码差值,ASCII码差值相同再比较长度差
  * */
 public void compare(){
  String str1 = "abc";
  String str2 = "bcd";
  String str3 = "abef";
  String str4 = "abc1234";
  String str5 = "Abc";
  System.out.println("abc和bcd的compareTo值为:"+str1.compareTo(str2));
  //-1,差值为第一个字母的ASCII码的差值'a'-'b'=-1
  System.out.println("abc和abef的compareTo值为:"+str1.compareTo(str3));
  //-2,差值为第三个字母的ASCII码的差值'c'-'e'=-2
  System.out.println("abc和abc1234的compareTo值为:"+str1.compareTo(str4));
  //-4,差值为两个字符串的长度差,因为"abc"-"abc"=0,所以返回长度差
  System.out.println("abc和Abc的compareTo值为:"+str1.compareTo(str5));
  //32,差值为'a'-'A'=32,compareTo区分大小写
  System.out.println("abc和Abc的compareToIgnoreCase值为:"+str1.compareToIgnoreCase(str5));
  //0,compareToIgnoreCase可以忽略大小写
 }
}

public class StringExample3 {
 public static void main(String args[]){
  //equals()方法
  EqualsExample ee = new EqualsExample();
  ee.compare1();//比较基本类型
  ee.compare2();//比较字符串类型
  ee.compare3();//比较对象类型
  //compare()方法
  CompareExample ce = new CompareExample();
  ce.compare();
 }
}


0 0
原创粉丝点击