"123"与"123"+"\0"的区别

求问:如题,两个字符串的区别是什么

String a="123";
String b="123"+"\0";
System.out.println(a);//输出123
System.out.println(b);//输出123
a.equals(b);//false
a.equals(b.trim());//true

主要疑惑得地方是为什么b.trim()后就变成true了

根据下面那位仁兄的回答,'123\0' 实际就是 '123\0\0', 那么 trim() 不是去空格函数么,为什么使用过后两个就相等了呢

阅读 5.4k
2 个回答

你这tag打的又是C,又是Java,你是同时要问Java和C下的区别么?
就C来看,"123"+"\0"是不合法的,所以我假设问的是"123""123\0"。在C中,'\0'会被隐式添加到literal string的后面来作为string terminator。当然,你也可以显式添加'\0',但这并不防止隐式'\0'添加到后面,也就是说,如果你写"123\0",实际上是"123\0\0",这点你可以通过使用下面的例子来验证:

const char str1[] = "123";
const char str2[] = "123\0";
printf("%d\n", sizeof(str1));
printf("%d\n", sizeof(str2));

str1占用的是4个byte,str2占用的却是5个byte!

扩展一下就是:

const char* str1 = "123";
const char* str2 = "123\0";
printf("%d\n", sizeof(str1));
printf("%d\n", sizeof(str2));

你猜会打印出什么?

Java我不会!

哎呀,我去,我答了C的,你又改成Java的,以后能不乱打tag么!

\0是 空字符

trim()把空白的字符删除
trim()把"\0" 去了,不就是"123"

推荐问题