两个字符串比较大小

两个字符串比较大小:
    一、可以用compareTo()方法,另外还有compareToIgnoreCase(String) 忽略大小写及 compareTo(object string)这些 方法返回值是int, 以compareTo()方法为例:
     1 .如果字符串相等返回值为0,不等返回其他数值。
比较方法是先比较对应字符的大小(Ascall吗顺序),从第一个字母开始比较。
     2.如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值)
               (负值前字符串的值小于后字符串,正值前字符串大于后字符串)
     3.如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,

以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度.

例如:


  1.                         String s1 = "abc";
  2. String s2 = "abcd";
  3. String s3 = "abcdfg";
  4. String s4 = "1bcdfg";
  5. String s5 = "cdfg";
  6. System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1长度小1)
  7. System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1长度小3)
  8. System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)
  9. System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)

二、还可以用“==”和.equals()方法判断大小:

1.“==”是一个判断相等的运算符,如果两边是基本数据类型,它判断的是值;如果两边是复合型数据类型(类类型),它判断的是地址;地址相同,内容一定相同,地址不同,内容不一定相同。

2..equals() 方法只能判断复合型数据类型,由于继承Object类,默认判断的是两边在内存的地址,判断结果和“==”一样,但在一些其他的类库中equals()被重写,例如String,Integer,Data等类中有其自身的实现,比较内容就不是地址了。

例如:


  1. String str1 = new String("hello");
  2. String str2 = "hello";
  3. System.out.println("str1==str2: " + (str1==str2)); \\false
  4. System.out.println("str1.equals(str2): " + str1.equals(str2)); \\true

当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

但equals() 在String中被重写过了,判断的是内容,不在是内存中的地址,所以是true。

但是String比较特殊,因为我们都知道jvm把内存分为3个区,分别是方法区,堆区和栈区。而在方法区中维护者一个String常量池,池中用来存放运行时产生的各种字符串,并且池中的内容不重复。而一般对象不在这个池中,对象放在堆里。这就需要分析String的创建方式:

1. 当使用任何方式来创建一个字符串对象str=“X”时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串str,否则,不在池中添加。

2.Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。

3 .使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。

4 使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。

例如:


  1. String str2 = "hello";
  2. String str3 = "hello";
  3. System.out.println("str3==str2: " + (str3==str2)); \\true
  4. System.out.println("str3.equals(str2): " + str3.equals(str2)); \\true

true的原因是hello都是从常量池中取出来的,但你new出来的不管常量池中有没有都会新建一个,地址就不一样了。

原文地址:https://www.cnblogs.com/jpfss/p/9842317.html

时间: 2024-11-01 13:31:43

两个字符串比较大小的相关文章

如何比较两个时间字符串的大小

方式一.后台 现在有两个字符串,是从表单读取来的日期性,“2003-10-12”与“2003-10-21”,现在如何判断他们的大小. 如果不想再转为date类型比较 有一种简单的方法 String a="2003-10-12";String b="2003-10-21";int result=a.compareTo(b);if (result==0)out.print("a=b");else if (result < 0 )out.prin

比较两个字符串大小

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //比较两个字符串大小 NSString *str=[[NSString alloc]initWithString:@"a"]; NSString *str1=[[NSString alloc]initWithString:@"A"]; NSComparisonRes

JavaScript-数字和字符串比较大小

JavaScript经常会比较字符串的大小,有的时候容易混淆,因此简单的梳理一下JavaScript字符串的比较: //1.数字比较 console.log('数字比较:' + (12 < 3)); //false //2.字符串数字和数字比较 统一转换成数字进行比较 console.log('字符串数字和数字比较:' + (11 < '5')); //false //3.字符串和数字进行比较 字符串为非纯数字时,则将非数字字符串转成数字的时候会转换为NaN,当NaN和数字比较时不论大小都返回

小议 js 下字符串比较大小

之前群里有人问如何比较两个时间大小,他的时间格式是 2014-08-08 而不是 2014-8-8.所以我给的方法是 直接比较,如: var a = "2014-08-08"; var b = "2014-09-09"; console.log(a>b, a<b); // false true 很方便不是么,但是原理是什么呢? 打开 ECMA 第 11.8.5 节 The Abstract Relational Comparison Algorithm在

PHP中比较两个时间的大小与日期的差值

在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst])     其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的当前值. 参数 描述 hour 可选.规定小时. minute 可选.规定分钟. second 可选.规定秒. month 可选.规定用数字表示的月. day 可选.规定天. year 可选.规定年.在某些系统上,合法值介于 1901 – 2038 之间.不过在 php教程 5 中已经不存在这个限制

JS 判断两个数字的大小

今天使用 Javascript 比较两个数字的大小,发现了 19 > 100 的现象,什么原因呢? 解决: var 定义的变量默认是字符串,比较两个字符串变量和比较两个数字的规则不同.所以应该先把字符串转化成数字,再去比较大小,如下代码: var counts = $("input[name='counts']").val(); var realCounts = $("input[name='realCounts']").val(); // 错误的比较方法 i

比较两个日期的大小

1 /** 2 * 比较两个日期字符串的大小 3 * @param date1 第一个日期 4 * @param date2 第二个日期 5 * @return 比较结果:返回2表示第二个时间在第一个时间之前:返回1表示第一个时间在第二个时间之前:返回0表示两个时间相同 6 */ 7 public static int compare_dateStr(String date1, String date2,String formatStr) { 8 DateFormat df = new Simp

比较两个数的大小,自定义比较两个整数的大小的方法

比较两个数的大小,自定义比较两个整数的大小的方法: 如果第一个数大,返回1 如果相等返回0 如果第一个数小,返回-1 在Main()方法中输入两个数,调用这个方法 示例: 请输入两个数: 45 56 第二个数大 按任意键继续...... 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 n

【字符串】判断两个字符串是否由相同的字符组成

1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 /** 5 * 功能:判断两个字符串是否由相同的字符组成,比如aaaabbc和abcbaaa就是. 6 * 思路1:将两个字符串按字符进行排序,判断排序后字符串是否相同: 7 * 思路2:申请一个256大小的int数组,遍历第一个字符串,遇到一个字符,就将字符对应的数组下标的元素+1,然后,遍历第二个字符串,同理-1,最后,判断数组的所有元素是否都是0. 8 */ 9 publi