精华内容
下载资源
问答
  • java中比较字符串大小
    千次阅读
    2018-10-18 00:32:22

    当比较俩个字符串时,我们用a=b时,有时两个字符串相同,也不一定返回true。有时返回false两个字符串也不一定不同。

    public class TestString{
      public static void main(String[] args){
       String str1 = "张三";
       String str2 = "张三";
       System.out.println(str1 == str2); //返回true
       System.out.println(str1.equals(str2)); //返回true
       String str3 = new String("李四");
       String str4 = new String("李四");
       System.out.println(str3 == str4); //返回false
       System.out.println(str3.equals(str4)); //返回true

    1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 
    他们之间的比较,应用双等号(==),比较的是他们的值。 
    2.复合数据类型(类) 
    当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
    对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

    所以说上述,"张三"字符串所在的内存地址是相同而,所以返回true。

    而到第二的时候。两个"张三"时new出来的,此时,两个的内存地址不同,所以返回了false.

     

    所以当我们单纯的相比较两个字符串是否相同,就要用equals.

    更多相关内容
  • 在Java中,经常需要比较两个字符串,这里总结一下。   1.判断字符串是否相等 在Java中,可以使用“==”来进行判断字符串是否相等。 示例: String s1="Hello"; String s2="Hello"; //...

     

    在Java中,经常需要比较两个字符串,这里总结一下。

     

    1.判断字符串是否相等

    在Java中,可以使用“==”来进行判断字符串是否相等。

    示例:

    String s1="Hello";
    String s2="Hello";
    //输出返回值
    System.out.println(s1==s2);
    
    

    这时,我们如果运行一下,会发现会输出“true”。

    换一种赋值方式再试试。

    String s1="Hello";
    String s2=s1;
    //输出返回值
    System.out.println(s1==s2);

    这是,运行一下程序,输出的值为“true”。

    但是我们知道,字符串的初始化有两种方式:直接等号赋值与用new初始化,直接等号赋值放入内存池,其它变量也可以引用;new初始化分配内存空间,不可引用;

    因此,我们用new初始化的方式试一试。

    String s1=new String("Hello");
    String s2=new String("Hello");
    //输出返回值
    System.out.println(s1==s2);

    这时,输出的结果会变成false。 

    为什么会有这样的结果呢?这和内存中的常量池有关。

    常量池属于方法区的一部分,当运行到s1创建对象时,如果常量池中没有,就在常量池中创建一个对象”Hello”,第二次创建的时候,就直接使用,所以两次创建的对象其实是同一个对象,它们的地址值相等。而对于两个基本数据类型,“==”比较的是两个对象的值是否相等;而对于引用类型,“==”比较的是两个对象的地址是否相等。也就是说,对于引用类型,当两个对象的地址相等,即指向同一个地址时,才会相等。

    因此前两次的结果都是false。

    再回到第三次的比较的赋值语句,

    String s1=new String("Hello");
    String s2=new String("Hello");

    上文中提到,new初始化分配内存空间,不可引用;也就是说,上面的“System s1=new String("Hello")”,相当于创建了两次对象,一次是在常量池中创建了对象”Hello”,一次是在堆内存中创建了对象s1。下一个语句也是同理。因此s1、s2的地址不一样,因此这输出false。所以使用“==”判断的时候需要注意的地方比较多。

     

    那么想要毫无顾虑地判断引用类型是否相等该怎么办呢?这时候equals()方法就派上用场了。

     

    为什么这么说呢?

     

    这和equals()方法的重写有关。在equals()方法存在于Object类中,因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层依赖的是==号,那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值,即比较两个对象的内容 

     

    因此,想要比较两个对象的值是否相等,可以通过equals()方法来完成。

    示例:

    
    string s1="Hello";
    string s2="Hello";
    //输出返回值
    System.out.println(s1.equals(s2));
    
    string s1="Hello";
    string s2=s1;
    //输出返回值
    System.out.println(s1.equals(s2));
    
    
    
    string s1="Hello";
    string s2="He";
    //输出返回值
    System.out.println(s1.equals(s2));

    这时,因为前两个比较语句,s1和s2相等,因此会输出两个true,最后一个比较语句由于s1和s2不相等,因此会输出一个false。

    2.比较字符串的大小

    在Java中,我们用compareTo()方法来比较字符串的大小。该方法属于java.lang.String包下,是Java提供的一个字符串比较的方法。

    CompareTo()返回值: int

    它是先比较对应字符的大小(ASCII码顺序),返回值类型分别有三种,小于0,等于0,大于0,
    1. 如果字符串相等返回值0;
    2. 如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值)(负值前字符串的值小于后字符串,正值前字符串大于后字符串);
    3. 如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度。

    语法示例:

    String s1 = "abc"; 
    String s2 = "abcd"; 
    String s3 = "abcdf"; 
    String s4 = "1bcdf"; 
    String s5 = "c"; 
    System.out.println( s1.compareTo(s2) ); // -1 (前面相等,此时比较字符串的长度,s1长度小1,因此输出-1) 
    System.out.println( s1.compareTo(s3) ); // -2(前面相等,此时比较字符串的长度,s1长度小2,因此输出-2) 
    System.out.println( s1.compareTo(s4) ); // 48 (第一个字符不相等,此时比较第一个字符的ASCII码,"a"的ASCII码是97,"1"的的ASCII码是49,所以返回48) 
    System.out.println( s1.compareTo(s5) ); // -2 (第一个字符不相等,此时比较第一个字符的ASCII码,"a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)

    以上就是Java中如何比较字符大小以及判断字符串是否相等的方法,如果大家发现了文章里的错误或者有更好的方法,欢迎留言评论,大家一起学习呀。

     

    展开全文
  • Java实现两个字符串比较

    千次阅读 2021-03-05 20:28:45
    如果要比较大小应该用compareto(String),它是依次比较字符串的每个字符的大小 用equals即比较对象又比较值,事实上,如果两个对象无法进行equals比较,编译根本无法通过.有的情况,比如Double和Float型,比较结果始终是...

    JAVA中字符串比较equals是用来比较字符串是否相等的,==比较是否为相同reference,不能用做字符串的比较.如果要比较大小应该用compareto(String),它是依次比较字符串的每个字符的大小 用equals即比较对象又比较值,事实上,如果两个对象无法进行equals比较,编译根本无法通过.有的情况,比如Double和Float型,比较结果始终是false   1,简单数据类型不可单纯的来做为一个对象,比较值大小时必须用“==”;   2,当用包裹类时,例如     Integer    i    =    new    Integer(1);       Integer    j    =    new    Integer(1);       i==j是比较的两个对象是否是同一引用,也就是说是否是指的同一对象,显然结果false;       如果用equals比较是比较两者的值是否相同,结果为true;   3,对象的比较除去StringBuffer类,结果都同于第二点(String    也与第二点相同);   4,StringBuffer类两种调用方法都返回false;   5,说一点,楼上的说法是不对的; 关于字符串(String) 字符串是用一对双引号括起来的字符序列,在JAVA语言中,字符串数据实际上由String类所实现的。Java字符串类分为两类:一类是在程序中不会被改变长度的不变字符串;二类是在程序中会被改变长度的可变字符串。Java环境为了存储和维护这两类字符串提供了String和StringBuffer两个类。 一、创建字符串 例: String str=new("This is a String"); 或者 String str="This is a String"; 二、得到字符串对象的有关信息 1.通过调用length()方法得到String的长度. String str="This is a String"; int len =str.length(); 2.StringBuffer类的capacity()方法与String类的length()的方法类似,但是她测试是分配给StringBuffer的内存空间的大小,而不是当前被使用了的内存空间。 3.如果想确定字符串中指定字符或子字符串在给定字符串的位置,可以用indexOf()和lastIndexOf()方法。 String str="This is a String"; Int index1 =str.indexOf("i");   //index=2 Int index2=str.indexOf('i',index+1);   //index2=5 Int index3=str.lastIndexOf("I");   //index3=15 Int index4=str.indexOf("String");  //index4=10 三、String 对象的比较和操作 1.String 对象的比较 String类的equals()方法用来确定两个字符串是否相等。 String str="This is a String"; Boolean result=str.equals("This is another String "); //result=false 2.String对象的访问 A、方法charAt()用以得到指定位置的字符。 String str="This is a String"; char chr=str.charAt(3); //chr="i" B、方法getChars()用以得到字符串的一部分字符串 public void getChars(int srcBegin,int srcEnd,char[]dst,int dstBegin) String str="This is a String"; Char chr =new char[10]; Str.getChars(5,12,chr,0);  //chr="is a St" C、subString()是提取字符串的另一种方法,它可以指定从何处开始提取字符串以及何处结束。 3.操作字符串 A、replace()方法可以将字符串中的一个字符替换为另一个字符。 String str="This is a String"; String str1=str.replace('T','t'); //str1="this is a String" B、concat()方法可以把两个字符串合并为一个字符串。 String str="This is a String"; String str1=str.concat("Test"); //str1="This is a String Test" C、toUpperCase()和toLowerCase()方法分别实现字符串大小写的转换。 String str="THIS IS A STRING"; String str1=str.toLowerCase(); //str1="this is a string"; D、trim()方法可以将字符串中开头和结尾处的空格去掉. String str="This is a String   "; String str1=str.trim();   // str1="This is a String" E、String 类提供静态方法valueOf(),它可以将任何类型的数据对象转换为一个字符串。如 System.out.println(String,ValueOf(math,PI)); 四、修改可变字符串 StringBuffer类为可变字符串的修改提供了3种方法,在字符串中间插入和改变某个位置所在的字符。 1.在字符串后面追加:用append()方法将各种对象加入到字符串中。 2.在字符串中间插入:用insert()方法。例 StringBuffer str=new StringBuffer("This is a String"); Str.insert(9,"test"); System.out.println(str.toString()); 这段代码输出为:This is a test String 3.改变某个位置所在的字符,用setCharAt()方法。 参考文献:唐浩强《java 编程技术》

    展开全文
  • 两个字符串比较

    万次阅读 2018-03-02 14:36:00
    两个字符串比较大小、可以用compareTo()方法,另外还有compareToIgnoreCase(String) 忽略大小写及 compareTo(object string)这些 方法返回值是int,以compareTo()方法为例: 1 .如果字符串相等返回值为0...

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

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

    例如:

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

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

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

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

    例如:

    String str1 = new String("hello");
    String str2 = "hello";
     
    System.out.println("str1==str2: " + (str1==str2));  \\false
    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对象。

    例如:

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

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

    展开全文
  • 两个字符串比较大小

    千次阅读 2018-10-24 10:56:00
    两个字符串比较大小: 、可以用compareTo()方法,另外还有compareToIgnoreCase(String) 忽略大小写及 compareTo(object string)这些 方法返回值是int, 以compareTo()方法为例: 1 .如果字符串相等返回值为...
  • java拼接字符串时去掉最后个多余逗号的方法本文实例讲述了java拼接字符串时去掉最后个多余逗号的方法。分享给大家供大家参考。具体分析如下:先看下面这段代码:for (int t = 0; t < memberLen; t++) {...
  • 两个String字符串如何进行比较?

    千次阅读 2021-05-26 19:46:12
    那么定义两个字符串类如何进行比较呢? 1. 用 == 假如是基本数据类型的对象用==进行比较是很有效的,因为比较的就是数值。而对于引用数据类型的话,比较的是地址。 这就是下面三个比较输出boolean值不同的原因之...
  • 字符串数组的三种形式

    千次阅读 2021-07-14 08:22:47
    、复习普通变量与指针变量的区别 所有变量的基本属性:变量名称,值,地址(分配...字符串数组char* arry[]在栈上申请空间,存储字符串地址,字符串实际是存储在只读存储区,在排序时交换的是字符串地址。 #include
  • C++ 字符串 对象 C++ 字符串 对象 创建方法 C++ 字符串 对象 输出到控制台 C++ 字符串 拼接 C++ 字符串 方法调用 ( 栈内存对象 ) ...C++ 字符串 方法调用 ( 内存对象 ) C / C++ 字符串 完整代码示例
  • String字符串相加的原理

    千次阅读 2021-02-12 09:45:51
    **因为String是非常常用的类, jvm对其进行了优化, jdk7之前jvm维护了很多的字符串常量在方法去的常量池中, jdk后常量池迁移到了中 **方法区是个运行时JVM管理的内存区域,是个线程共享的内存区域,它用于存储...
  • C++数据结构——字符串

    千次阅读 2018-06-28 22:18:18
    C++数据结构——字符串   参考博客或网址: (1)菜鸟教程——C++字符串 (2)https://blog.csdn.net/ylh1234/article/details/64929992 (3)https://blog.csdn.net/fenxinzi557/article/details/5145782...
  • 字符串的三种存储方式

    千次阅读 2021-05-19 09:11:12
    @[TOC]在数据结构中,字符串要单独用种存储结构来存储,称为串存储结构。这里的串指的就是字符串。无论学习哪种编程语言,操作最多的总是字符串。我们平常使用最多的存储结构无疑是利用定长数组存储。但是这种存储...
  • C中字符串常量&字符数组&字符常量

    万次阅读 多人点赞 2019-12-17 11:21:42
    在 C 语言中,字符串有两种存储方式,种是通过字符数组存储,另种是通过字符指针存储。 、字符常量: 个用单引号括起来的单个字符(或字符转义序列或三字母词) 实质(含义):是个整形值。属于四大...
  • c语言字符串

    万次阅读 多人点赞 2018-12-05 14:04:48
    首先c语言中所有字符串的结尾标志都是/0 是字符串结尾的标志 它是种转义符 而EOF是文件流结束标志代表着 文件(file),也可以是标准输入(stdin)的输入结束 而我们都知道大多数程序EOF的传递是靠-1这个返回值...
  • 【JavaSE】字符串常量池、String详解

    千次阅读 2022-02-11 15:48:38
    1.String Pool 1.1字符串常量池产生时间 1.2字符串常量池的位置 1.3字符串常量池的优点 2.String 2.1不可变性 2.2定义方式 2.2.1 字面量的方式 2.2.2 new的方式 2.2.3 intern()的方式
  • C语言每日练 2021年9月11日 类似于重写strstr,匹配子字符串
  • rust 字符串的操作 -11

    千次阅读 2021-01-27 10:39:23
    ,前言 不管在什么语言中,对字符串的处理都是必须且重要的,rust中的字符串数据类型...()Rust将字符串分类 Rust将字符串分为两种: 1) &str :固定长度字符串(也称字符串字面量) 2) String ...
  • 4)字符串常量池和运行时常量池究竟去了哪里?4)元空间是什么?5)关于为什么移除永久代?5)补充         我们知道在JDK1.8中取消了永久代,区而代之使用了元空间来实现...
  • 在程序设计中,为了方便处理,通常把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。...本文主要介绍维数组、二维数组和字符数组,其余的数组将会在以后的文章中介绍到...
  • 并在同一专栏会有多个字符串输入输出处理的相关内容。 目录 输入 逐个元素输入 整体串形式输入 输出 逐个输出 整体串形式输出 任一元素开始串形式输出 输入 逐个元素输入 在对字符数组进行输入操作时...
  • C语言关于字符串和字符数组的转化问题

    千次阅读 多人点赞 2020-11-21 11:33:36
    C语言关于字符串和字符数组的转化问题 小菜鸡CS本科生枚,第次写博客,如果有什么写的不对或者不好的欢迎大家批评指正, 写这篇博客的原因是我今天遇到的一道题,题目很简单,leetcode中等难度,可是这道题却...
  • Leetcode学习之字符串

    千次阅读 2021-10-27 19:37:09
    编写个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这问题。 你可以假设数组中的所有...
  • golang数据结构初探之字符串string

    千次阅读 2021-08-23 15:39:33
    声明个空字符串后再赋值 var s string s = "hello world" 需要注意的是空字符只是长度为0,但不是nil。不存在值为nil的string 使用简短变量声明: s := "hello world" //直接初始化字符串 双引号与单引号 字符...
  • 答案是:字符串常量区。 题目考查的为Java中的字符串常量池和JVM运行时数据区的相关概念。 "abc"为字面量对象,其存储在内存中。而字符串常量池则存储的是字符串对象的个引用。   Java中的...
  • C++返回字符串函数的几种实现方法

    万次阅读 2018-08-24 11:37:16
    C++返回字符串函数有四种方式: 1。使用空间,返回申请的地址,注意释放 2。函数参数传递指针,返回该指针 3。返回函数内定义的静态变量(共享) 4。返回全局变量 1.使用空间,返回申请的地址,注意...
  • 给你字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后个单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s = "Hello World" 输出:5 示例 ...
  • java中的字符串字符串常量池

    千次阅读 2019-03-24 13:31:23
    String作为种被Final修饰并按照不可变性设计的类,应当说某种程度上语言本身是希望开发者把它当做基本数据类型去使用的,然而...java本身又提供了一些构建和操作字符串的快捷或隐秘的方式,使用不当往往产生很多不...
  • C#字符串拼接

    千次阅读 2020-04-22 17:22:10
    字符串对我编程人员来说是字符串时每天见面的常客,你不认识不熟悉他都不得行,字符串的拼接更是家常便饭,那么在实际开发过程中实现字符串的拼接有哪一些方式呢?咱们起来聊聊,来交流沟通,学习波。也许你会说...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 189,863
精华内容 75,945
关键字:

比较一堆字符串大小

友情链接: SCH-LIB-AD.rar