一、修改字符串的内容
1、每个String类型的字符串都是只读的,所以需要修改字符串中的某些字符则比较困难。比如要在String s = "123"; 要在2之后插入一个字符串"45" 那么需要做的是s = s.substring(0, 2) + "45" + s.substring(2);
为何java要做成着么复杂的操作呢?这是为了性能考虑!虽然使用拼接的方式修改字符串所消耗的性能比直接在字符串中修改要更多,但是我们发现修改字符串的次数很少但是访问或者复制字符串的次数多的多。
所以String使用只读的方式可以很方便的运用共享计数的方式,从而提高复制效率并且减少内存的使用。
2、那么如果要频繁的拼接该怎么办呢?我们可以使用StringBuilder,如下所示:
StringBuilder builder = new StringBuilder(); builder.append('a'); builder.append("123"); builder.insert(1, 'c'); builder.insert(2, "kkqqq"); String re = builder.toString();
先用StringBuilder进行构建字符串,最后再转回String
二、关于java判断是否为空字符串
1、要注意对应的目标字符串是否为空
比如要判断字符串s是否为空字符串那么应该做如此的判断:if (s == null || s.equal(""))
这里有两个注意的地方:1、要先判断s是否等于空;2、使用equal函数跟"" 字符串进行比较
为何要先判断是否等于空呢?因为如果不先判断的话假设s为空那么s.equal的调用就会出现异常
既然判空着么麻烦那么能否直接使用:if(s == "") 的方式判断是否为空呢?也是不行的
因为使用==则判断的是等号左边和右边对应的指针是否指向同一个位置,假设s是一个确认的字符串那么这个等式是成立的,因为s跟"" 共享同一个内存空间
建议:最好将这个判空写成一个函数以防出现多线程的问题,如下代码在类TextUtils中已经存在,如果要判断是否为空只需要调用如下函数即可:if(TextUtils.isEmpty(s))
public static boolean isEmpty(@Nullable CharSequence str) { return str == null || str.length() == 0; }
本人曾经踩过坑
使用如下的判断,出现了线程的崩溃 if (mLoadedPlistPaths.get(effectType) == null || mLoadedPlistPaths.get(effectType).length() == 0) { return; }
其中mLoadedPlistPaths是成员函数,当在别的线程mLoadedPlistPaths被设置为别的值,则导致在mLoadedPlistPaths.get(effectType) == null 为false之后继续往下走程序崩溃
正确的调用方法是:
if (TextUtils.isEmpty(mLoadedPlistPaths.get(effectType))) { return; }
则可以保证进入isEmpty之后,str持有获取的对象
标签:判断,java,String,builder,为空,字符串,mLoadedPlistPaths From: https://www.cnblogs.com/czwlinux/p/16721191.html