java关于字符串拼接的问题
发布网友
发布时间:2022-04-20 14:42
我来回答
共5个回答
热心网友
时间:2023-06-25 22:45
这是描述Java编译器对字符串常量的优化方法。
众所周知,数据内容是要定义在数据段的,假设下面的代码:
String s1 = "abc" ;
String s2 = "abc" ;
假如不进行优化的话,结果就是内存中有两个重复的"abc"内容,也就是说有两个“对象”。
Java编译器会针对这种情况进行优化,对于常量字符串"abc",java编译器会只产生一个"abc"对象。这样,s1和s2是指向同一个内存区域的。
但假如字符串的值无法在编译时确定,如:String g = a.concat("3");
那么Java编译器将会为g变量分配一个空间。注意也不是立即分配,因为Java编译器是在全局对动态分配内存。
补充: 编译器不会检查 "test" + "3" 的结果是否就是"test3",因此创建新对象。
热心网友
时间:2023-06-25 22:46
String c=a+b;
java中字符串的“+”操作实际上相当于以下的C操作的 c=concat(a,b)。
char * concat(char *a,char *b)
{
int aLen,bLen,cLen,i;
char *c;
aLen=strlen(a);
bLen=strlen(b);
cLen=aLen+bLen;
c=(char*)malloc(sizeof(char)*(cLen+1));
for(i=0;i<aLen;i++)
{
c[i]=a[i];
}
for(i=0;i<bLen;i++)
{
c[i+aLen]=b[i];
}
c[aLen+bLen]='\0';
return c;
}
随手写的C代码,应该不能编译的,看明白意思就成。
热心网友
时间:2023-06-25 22:46
String 是final类型的,也就是不可改变,如果进行了字符串的拼接、取字串等操作将返回一个新的String对象,所以进行==操作的时候就会返回false。对于对象的比较应该使用equals方法
热心网友
时间:2023-06-25 22:47
内容一样...但是内存空间不一样!且是 == 比较的是内存... 而不是内容
热心网友
时间:2023-06-25 22:47
就是一个问题 你定义的所有的都是字符串型的 所以你的比较要用EQUES
这样的话显示的就是ture了