java string底层实现_Java-学习日记(Shell与String底层原理)

Java杂记-2020.08.07

@Test中测试所有getter,setter方法

最近一周在写codereview,相关技术是kmock1.0.19,gradle

build.gradle中配置文件

testCompile 'pl.pojo:pojo-tester:0.7.6'

testCompile('junit:junit:4.12')

testCompile('kmock:kmock:1.0.19')

@Test中的使用,这样就能覆盖所有getter,setter方法了

@Test

public void ExcelInvoiceRes(){

// given

final Class> classUnderTest = ExcelInvoiceRes.class;

// when

// then

assertPojoMethodsFor(classUnderTest).quickly().testing(Method.GETTER, Method.SETTER)

.testing(Method.CONSTRUCTOR)

.areWellImplemented();

}

Shell面试题:批量生成随机字符文件名

for i in {1..10}

do

filename=$(uuidgen|tr '0-9' 'a-z'|cut -c 1-10)

touch ${filename}_empirefree.html

done

删除以 .html结尾的文件

find . -name '*.html'| xargs rm -rf

Shell面试题:批量修改文件名

for i in $(ls *html)

do

rn=$(echo $i|cut -c -10)

mv $i $(rn).HTML

done

String和final String

都知道String内部是设置成final的,因为执行效率高和安全性这两个优点,前面加final的话就类似常量了,具体如下

String a = "a";

System.out.println((a + "b") == "ab"); //false

System.out.println(("a" + "b") == "ab"); //true

final String b = "b";

System.out.println(("a" + b) == "ab"); //true

System.out.println((a + b) == "ab"); //false

执行效率高:当子类重写(override)父类某个方法,JVM如果是用final修饰的方法,就能直接用,效率高,而不用去虚函数表里面寻找

安全性:多线程中,如果String被修改了,会导致安全问题(String a = "b"只是修改了变量指引,实际"a"的内存并没有消失)。还有就是Hashmap中如果String可变,就会产生不同的 Hash值,这也会引发安全性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值