每日总结day01

Java字符串连接方式中的+运算符只不过是一个语法糖,编译器会将其转化成StringBuilder操作

几乎每次编译器遇到一个+运算符,它的参数是字符串对象或文字时,它就会把代码转换成一个三步操作序列:

1.首先创建一个新的StringBuilder实例,将+号前面的字符串对象或文字当成参数传入它的构造方法中

2.然后调用append()方法并传入+号后面的参数

3.最后再调用StringBuilder.toString()方法把字符串缓冲区转成String

不过编译器会在可能的情况下优化这个过程

例如:一行代码将几个字面值或常量连接起来创建一个字符串时编译器会把这些值本身连接起来

String s1="abc";
String s2="ab";
String s3=s2+"c";
String s4="ab"+"c";
s1==s3//false
s1==s4//true

字面值存储在方法区的常量池中,而通过new创建的对象在堆内存中它们的内存地址是不同的
通过字面值拼接成的字符串会先从常量池中寻找是否有相同的字符串,如果有就把常量池中相同的字符串对象引用返回
不存在就创建新的字符串对象然后存入常量池之后再返回字符串对象引用
而字符串引用和字面值常量拼接时,会执行三部曲即它存在堆内存而不在常量池中

这就是上述代码准确解释

参考资料:https://www.experts-exchange.com/articles/17406/String-concatenation-in-Java-syntactic-sugar-versus-efficiency.html

最后谈谈自己对上转型的理解:

对于同样是调用子类的实现方法为什么要子类对象指向父类引用而不是子类对象指向子类引用?

都知道上转型是多态,但什么是多态我的理解还是很模糊那我就讲讲自己对为什么要上转型的理解

比如说一个供应商提供了一个方法,和一个接口(如果接口不能理解的话那就把接口换成一个类吧)方法是要接收

接口实现类的对象(或子类对象),接口不同的人有不同的实现类(或不同的子类)如果用子类对象指向子类引用的方式,供应商怎么在方法中设置那个要接收的参数类型?他不知道你的实现类或继承类的类型是什么所以就无从设置参数类型,但如果用了上转型的话供应商只需要在方法的参数中设置成接口类型或父类类型,我们通过上转型成接口类型或父类类型就能向方法中传递参数,供应商无需知道我们的实现类或继承的子类.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值