当前位置: 移动技术网 > IT编程>开发语言>Java > String 字符串相加比较

String 字符串相加比较

2019年04月13日  | 移动技术网IT编程  | 我要评论

百分数的意义和写法ppt,国家公务员面试地点,长者的好运符怎么获得

string 字符串相加 对比
public static void main(string[] args)  {
string a = "helloword";
final string b = "hello";
string d = "hello";
string c = b + "word";
string e = d + "word";
string f ="hello"+"word";
system.out.println(a == c);
system.out.println(a == e);
system.out.println(a == f);

}

输出:

  true
  false
  true

 

2019-04-1217:23:56

首先要明确的是 引用数据类型 == 比较的是地址值,equal 没重写比较的是地址值,重写之后比较的是内容.string重写了,stringbuffer没有重写

其次:

a==c 为true是因为 b为final类型,当final变量是基本数据类型以及string类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。因此在上面的一段代码中,由于变量b被final修饰,因此会被当做编译器常量,所以在使用到b的地方会直接将变量b 替换为它的  值。所以 c = b+"word" 等于 c = “hello”+“word” 同--->有final时是直接比较内容而不是地址。

a ==e 为false是因为e = d+"word" 其实是创建了一个stringbuffer对象,然后用stringbuffer对象执行append方法来创建出字符串对象“ab”,然后再转换成为string。但是这个转换后的string对象,也就是上面的s3是放在堆里面的。而s4则是字符串常量,放在常量池里面。所以返回的是false。 ----->地址值不同

a ==f 为true 是因为: 常量相加的时候,其实是在编译的时候就直接相加为“helloword”,这是jvm的优化,所以运行的时候,a和f的字节码是一样的。因为在常量池中有了一个“helloword”,所以两个引用指向的是一个字符串“helloword”,所以返回结果也是true。----->指向同一个地址

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网