精华内容
下载资源
问答
  • String、char相等比较

    万次阅读 多人点赞 2017-08-14 19:21:19
    有时在写代码时会不小心在比较String与String值相等charchar相等时会没弄清楚”==”与equals()两种比较方法的区别就直接选一个用上了,最后在Debug时才发现以为是true的地方却是false,以为是false的地方却是...

           有时在写代码时会不小心在比较String与String值相等,char与char值相等时会没弄清楚”==”与equals()两种比较方法的区别就直接选一个用上了,最后在Debug时才发现以为是true的地方却是false,以为是false的地方却是true。写这篇文章只是为了记录平时写代码时可能会犯的一些小错误,如下先预先说明:

           String与String值相等比较用equals()方法,char与char值相等比较用”==”进行比较。

           先说一下String与char的区别:
    - java中的八大基本类型:字节型(byte),短整型(short),整型(int),长整型(long),字符型(char),浮点型(float),双精度型(double),布尔型(boolean)
    - 在java里面除去基本数据类型的其它类型都是引用数据类型,所以String不是基本类型而是引用类型。
    - 也就是说,String是一个类,可以在IDE中查看到String的源码,String有很多API。而char只是一个基本数据类型,不是一个类。

           String是引用类型,用”==”进行比较是比较两个字符串是否引用同一地址,如果只是比较内容是否一致,是不是同一个对象(即是不是同一地址)不去比较,则只能用equals()方法进行比较。代码如下:

    public class StringEqualsTest {
        public static void main(String[] args) {
            String s1 = "abcdef";
            String s2 = "abcdef";
            System.out.println(s1 == s2); // true,因为s1和s2是同一个字符串常量abcdef的引用,是同一个对象地址,所以相等。
            System.out.println(s1.equals(s2)); //true,equals()方法只是比较两个字符串的值是否相等,地址不会进行比较,两个字符串的值都是abcdef,所以相等。
    
            s1 = new String("abcdef");
            s2 = new String("abcdef");
            System.out.println(s1 == s2);  // false,因为s1和s2是两个不同的对象,虽然字符串值都是abcdef,但是对象地址不同,用==比较的话不相等。
            System.out.println(s1.equals(s2));  //true,equals()方法只是比较两个字符串的值是否相等,地址不会进行比较。
        }
    }

           char是一个基本数据类型,只能用”==”进行值相等比较,如果想用equals()方法进行比较,则要用char的封装对象Character。代码如下:

    public class CharEqualsTest {
        public static void main(String[] args) {
            //char是基本类型,没有equals()方法,只能用"=="来进行比较。
            char c1 = 'a';
            char c2 = 'a';
            System.out.println(c1 == c2);   //true,c1和c2是同一个字符常量'a'的引用,是同一个对象地址,所以相同。
    
            //如想用equals()方法,则可以用char的封装对象Character。下面就与String是一模一样的了,如下:
            Character c3 = 'a';
            Character c4 = 'a';
            System.out.println(c3 == c4);  // true,c3和c4是同一个字符串常量'a'的引用,是同一个对象地址,所以相同。
            System.out.println(c3.equals(c4));  //true,equals()方法只是比较两个字符串的值是否相等,地址不会进行比较,两个字符串的值都是a,所以相等。
    
            c3 = new Character('a');
            c4 = new Character('a');
            System.out.println(c3 == c4);  // false,c3和c4是两个不同的对象,虽然字符串值都是a,但是对象地址不同,用==比较的话不相同。
            System.out.println(c3.equals(c4));  //true,equals()方法只是比较两个字符串的值是否相等,地址不会进行比较。
        }
    }
    
    展开全文
  • c++ char*判断相等

    万次阅读 2019-05-15 21:10:01
    strncmp ( const char * str1, const char * str2, size_t n ); 【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。 字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。...

     strncmp ( const char * str1, const char * str2, size_t n );

    【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。

    字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志'\0',若差值不为0,则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。注意:要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较,无论n是多少,不再继续比较后边的字符。

    【返回值】int ,若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。

     上面是百度知道描述内容非常详细,下面举个列子。

    if (!strncmp("band names", line, 10))
    {
        //相等,‘band names’加上空格共10个字符,与line串判断前10个字符。
        //特点大小写敏感
    }

     

    if (strncmp("band names", line, 10)==0)
    {
        //同上,相等。
        //特点大小写敏感
    }

    笨方法:

    if (line[0]='b'&&line[1]='a'&&line[2]='n'&&line[3]='d'&&line[4]=' ')
    {
        //相等,‘band ’加上空格共5个字符,与line串判断前5个字符。
        //特点大小写敏感
    }

    同上:

    char*line = "Band Names";
    char linearray = *line;
    char linearray1 = *("Band Names");
    if (linearray1 == linearray)//同为char,自对比指针指向的一个字节
    {
    	printf("相等");//或者if (line[0] == linearray1 )
    	//特点大小写敏感
    }

    扩展:

     	//我们需要char*类型,但语法不支持
    	char* test1 = "Band Names", test2 = '1';
    	typedef char* Chars;//需要重定义类型
    	Chars test3 = "Band Names", test4 = "Band Names";
    	Chars test5 ,test6;
    	printf("test1:%p\n", test1);
    	printf("test1:%p\n", test2);
    	printf("test1:%p\n", test3);
    	printf("test1:%p\n", test4);
    	test5 = test1;
    	test6 = test1;
    	printf("test1:%p\n", test5);
    	printf("test1:%p\n", test6);
    	if (test5 == test3)//地址
    	{
    		printf("相等");
    	}
    

    进阶:

    /** Alias for strcasecmp() == 0 不分大小写*/
    #define Equal(a,b)              (_stricmp((a),(b))==0)
    /** Alias for strcasecmp() == 0 */
    #define EQUAL(a,b)              (strcmp((a),(b))==0)
    /** Alias for strincmp() == 0 不分大小写*/
    #define Equaln(a,b,c)			(_strnicmp((a),(b),(c))==0)
    /** Alias for strncmp() == 0 */
    #define EQUALN(a,b,c)			(strncmp((a),(b),(c))==0)

    展开全文
  • 判断char类型是否相等char与String类型的转换 ** 判断char类型是否相等用“==”,如果要用equals,可以类型改为character类型 将char类型转为String类型,String str = String.valueOf(Char ch); ...

    **

    判断char类型是否相等,char与String类型的转换

    **

    判断char类型是否相等用“==”,如果要用equals,可以类型改为character类型

    将char类型转为String类型,String str = String.valueOf(Char ch);

    展开全文
  • char相等判断

    千次阅读 2013-12-26 10:51:25
    而两个表的字段都是char(定长),这样作判断肯定是不相等了。a2.name替换后需要加上一位空格来补齐 正确语句应该如下 SQL> select * from a1,a2 where a1.name=replace(a2.name,CHR(13),'') || ' '; ID NAME...

    有朋友提出如下问题

    /*为什么这样不行*/
    select * from a1,a2 where a1.name=replace(a2.name,CHR(13),'');

    /*这样就可以*/
    select * from a1,a2 where a1.name=replace(a2.name,CHR(13),CHR(32));


    他的案例环境如下

    DROP TABLE a1 PURGE;
    DROP TABLE a2 PURGE;
    create table a1(id int,name char(10));
    create table a2(id int,name char(10));
    insert into a1 values(1,'a');
    insert into a2 values(100,'a'||CHR(13));
    commit;
    

    我们来分析一下原因,首先看下a2表替换后的值

    SQL> select length('|' || replace(a2.name,CHR(13),'') || '|') AS L2,'|' || replace(a2.name,CHR(13),'') || '|' AS a2_n from a2;
            L2 A2_N
    ---------- ------------
            11 |a        |
    这儿长度是11。

    再看下a1表

    SQL> select length('|' || name || '|') AS L1,'|' || name || '|' AS a1_n from a1;
            L1 A1_N
    ---------- ------------
            12 |a         |

    长度是12。

    a2表少了一位,是因为其中的chr(13)被替换掉了。

    而两个表的字段都是char(定长),这样作判断肯定是不相等了。a2.name替换后需要加上一位空格来补齐

    正确语句应该如下

    SQL> select * from a1,a2 where a1.name=replace(a2.name,CHR(13),'') || ' ';
                                         ID NAME                                            ID NAME
    --------------------------------------- ---------- --------------------------------------- ----------
                                          1 a                                              100 a

    如果字段类型改为变长:varchar2,就没有这种问题了。

    SQL> DROP TABLE a1 PURGE;
    Table dropped
    SQL> DROP TABLE a2 PURGE;
    Table dropped
    SQL> create table a1(id int,name VARCHAR2(10));
    Table created
    SQL> create table a2(id int,name VARCHAR2(10));
    Table created
    SQL> insert into a1 values(1,'a');
    1 row inserted
    SQL> insert into a2 values(100,'a'||CHR(13));
    1 row inserted
    SQL> commit;
    Commit complete
    SQL> select * from a1,a2 where a1.name=replace(a2.name,CHR(13),'');
                                         ID NAME                                            ID NAME
    --------------------------------------- ---------- --------------------------------------- ----------
                                          1 a                                              100 a
    
    SQL> 



    展开全文
  • char 与 String 相等比较

    千次阅读 2014-03-30 19:26:18
    这是一个相当2 相当基础 相当没有意义的帖子;但今天因为这个问题引发了一个bug。小细节也很重要!!... //char 表示单个字符  char c=1;  //不需要单引号也能表示 //  System.out.p
  • 我需要的是一个相等比较,我有个u_char uc[2]的数组,赋值是uc[0] = 0X0A, uc[2] = 0X3C 现在我有个函数要将这个数组传过去,求教如何设定这个参数,另外这个数组如何与0A3C做相等比较
  • C++判断两个char数组是否相等

    千次阅读 2018-10-12 09:48:33
    在比较两个字符串时不能利用符号“”,“”符号比较的是两个字符串的地址是否相等,谨记!
  • 今天把 char ‘1’ 转为 int 时得到的是"49", 查资料以后发现直接转化得到是‘1’的Ascii. 如下面: char c = '1'; int n = (int)c; System.out.println(c + ": " + n); 输出结果: 1: 49 ...
  • 如何判断两个char*所含内容是否相等

    万次阅读 2015-11-09 04:34:42
    char* b; cin>>b; char* a = "LOGMAN"; if (strcmp(a, b) == 0){ ...... } 方法如上,其中对strcmp函数而言, 设这两个字符串为str1,str2, 若str1==str2,则返回零; 若str1>str2,则返回正数; ...
  • unsigned char appendChar1[] = {0xD3, 0xD0, 0xCF, 0xDE, 0xB9, 0xAB, 0xCB, 0xBE}; char appendChar2[] = {0xD3, 0xD0, 0xCF, 0xDE, 0xB9, 0xAB, 0xCB, 0xBE}; if ((appendChar2[i]==appendCh...
  • 在写程序的过程中,经常会遇到要比较两个字符串是否相等的情况。 1. 如果要比较的对象是char*字符串 利用: int strcmp(const char* s1,const char* s2); (1) 当s1 < s2时,返回负数; (2) 当s1 == ...
  • 原文链接 ... #include  int strcmp(char *source, char *dest)  {   while(*source == *dest && *source != '\0' && *dest != '\0')
  • #include<stdio.h>int strcmp(char *source, char *dest) { int m,n,i,flag; m = strlen(source); n = strlen(dest); if(m!=n) flag = -1; if(source==NULL&&dest==NULL) { fl
  • 最近使用java做作业,使用char数组去读取字符转化成字符串,然后与另一值相同的字符串使用equals比较,输出发现值一样,但是equals的比较结果却为false。 最后通过debug发现String对象的内部也是一个char数组,通过...
  • 两者不相等,是因为str1 和 str2 都是字符数组,每个都有其自己的存储区,它们的值则是各存储区的首地址。但有些情况却不一样, 程序如下:   #include int main(void) { const char str3[] = ...
  • int strcmp(char *source, char *dest) { while(*source == *dest && *source != '\0' && *dest != '\0') { source++; dest++; } if (*source =='\0' && *dest == '\0') return 0; else return
  • 本文转载自:... #include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;int strcmp(char *source, char *dest){while(*source == *dest &amp;&amp; *source !=...
  • 两者不相等,是因为str1与str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区的首地址。  char* str3="abc";char* str4="abc";是相等的,因为str3与str4并非字符数组而是字符指针,并不分配存储区,...
  • 两者不相等,是因为str2和str1都是字符数组,每个都有其自己的存储区,他们的值则是个存储区的首地址,举例:#include&lt;iostream&gt;using namespace std;int main() { const char str3[] = "abc&...
  • ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char char相当于signed char或者unsigned char,但是这取决于编译器! 这三种字符类型都是按照1个字节存储的,可以保存256个不同的值。 signed char...
  • char char* 的困惑

    千次阅读 2016-09-12 10:28:13
    char c="c"; //定义一个字符变量c ,value=c,且在内存中是以AscII 码方式存储,也就是存的是一个整数。 char * c="what"; //用字符指针定义一个c,且初始化为“what',此时 cout char* str[]={"what","is","your",...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 230,895
精华内容 92,358
关键字:

char相等