2

tostringbuilder

(1)“+”方法拼接字符串

虽然编译器对字符串的加号做了优化,它会使用StringBuilder的append方法进行追加,按道理来说,其执行时间也应该是0毫秒,不过它最终是通过toString方法转换成String字符串的,例子中“+”拼接的代码与如下代码相同:

str = new StringBuilder(str).append("c").toString();

注意看,它与纯粹使用StringBuilder的append方法是不同的:一是每次循环都会创建一个StringBuilder对象,二是每次执行完毕都要调用toString方法将其转str.getChars(0, otherLen, buf, count);

//复制字符数组,产生一个新的字符串

return new String(0, count + otherLen, buf);

}

其整体看上去就是一个数组拷贝,虽然在内存中的处理都是原子性操作,速度非常快,不过,注意看最后的return语句,每次的concat操作都会新创建一个String对象,这就是concat速度慢下来的真正原因,它创建了5万个String对象呀!

(3)append方法拼接字符串

StringBuilder的append方法直接由父类AbstractStringBuilder实现,其代码如下:

public AbstractStringBuilder append(String str) {

//如果是null值,则把null作为字符串处理

if (str == null) str = "null";

int len = str.length();

//字符串长度为0,则返回自身

if (len == 0) return this;

int newCount = count + len;

//追加后的字符数组长度是否超过当前值

if (newCount > value.length)

expandCapacity(newCount); //加长,并做数组拷贝

//字符串复制到目标数组

str.getChars(0, len, value, count);

count = newCount;

return this;

}

看到没,整个append方法都在做字符数组处理,加长,然后数组拷贝,这些都是基本的数据处理,没有新建任何对象,所以速度也就最快了!注意:例子中是在最后通过StringBuffer的toString返回了一个字符串,也就是说在5万次循环结束后才生成了一个String对象。

三者的实现方法不同,性能也就不同,但并不表示我们一定要使用StringBuilder,这是因为“+”非常符合我们的编码习惯,适合人类阅读,两个字符串拼接,就用加号连一下,这很正常,也很友好,在大多数情况下我们都可以使用加号操作,只有在系统性能临界(如在性能“增之一分则太长”的情况下)的时候才可以考虑使用concat或append方法。而且,很多时候系统80%的性能是消耗在20%的代码上的,我们的精力应该更多的投入到算法和结构上。

注意 适当的场景使用适当的字符串拼接方式。

上周面试了一位南京大学的应聘者,在公司干了3年,没升职加薪果断跳槽,跳槽后不仅做了项目经理,月薪更是涨到了35000元,上任公司系统出现bug让他回去修复,给他20000元作为报酬,他直接拒绝了。

就在上周,公司项目经理老王提前退休了,次日,我就接到了老板要求招聘项目经理的文件,要求是这样的,10年以上游戏开发经验,3年管理带队经验,年龄45岁以下。

收到文件时,我整理了一下资料就开始了招聘,要知道这种经理级的编程师可不是好招的,网招大多都是刚毕业的学生或者初级编程师,于是我就动用了身边全部人事朋友的人脉关系,开始发帖求助,皇天不负有心人,数日的努力下,我收到了一位40岁的应聘者文件。

于是我就和他约了第二天上午10点钟面试,他的基本情况是这样的,年龄40岁,毕业于南京大学,计算机科学技术专业,有15年的游戏开发经验,虽然没有带队经验,但是之前公司的员工大多都是他教过来的,由于这种人才比较难招,我就把他带到了总监办公室面试。

总监问了他一个基础面试题,说道:请简述GC(垃圾回收)产生的原因,并描述如何避免?

他回答说:GC回收堆上的内存,避免:

1.减少new产生对象的次数。

2.使用公用的对象(静态成员)。

3.如果字符串拼接多的将String换为StringBuilder。

总监对他的回答很满意,又仅接着问为什么从上家公司离职?

他说在那家公司做了3年了,从入职到离职月薪一直都是15000元,从来没有涨过,别的公司过年过节都有福利,我们公司除了加班什么都没有。3年了,公司每次来新人经理一直让我带,刚开始我也认为老板是在培养我,给我机会,谁知,在那公司做了3年还是一个码农。

就在前两个月,老板让我去甲方出差,到了甲方公司我才下定决心离职,甲方公司有一个30岁的小伙子,月薪22000元,技术还没有我高,这让我瞬间承受了巨大打击,我辛辛苦苦15年的工作经验,到zui后还比不上一个小伙子薪资高。

回到公司,我怀着怒气找老板理论加薪,说道:我在公司3年了,公司所有难搞的项目都是我在做,在公司没有人比我付出的更多了吧?可是我辛苦数年换来的是什么?此时,我趁机向老板提出了加薪5000的决定,没成想老板一言不发。

大概沉默了有1分钟左右,老板说,咱们公司马上要成立子公司了,你放心,到时候子公司项目总监就是你的,我怎么可能会不为你着想呢,毕竟你也是公司元老了。

我心想老板真不愧是老油条,都这个时候了还在给我画饼。现在我只认薪资,不认人,于是就说,我要求月薪加5000不过分吧?你要是感觉我对公司还有用,你加薪就完事了,其他的我也不想多说,没想到老板直接拒绝了。

于是我出门便找了HR办理离职手续,就在我填写离职单时,我听见老板已经让另一个人事开始招聘了,我气的破门而出,就这样离职来到了贵公司面试。

总监听后直接给他开了月薪35000元,项目部经理一职,因为总监知道这个岗位不好招人,况且老王是因为与上家公司产生矛盾才离职的,心情肯定很糟,如果现在能满足老王的这两项需求,不仅收买了人心,他也一定会对新公司充满信任,努力创利的。

就在老王入职一周后,他上任公司老板让HR给他联系,说是公司项目出现了bug,别人修不了,想让老王回去帮忙修一下,给20000元作为维修报酬,谁知老王直接把她电话挂断拉黑了。

我的观点分析如下:

1.上任公司老板一直不给加薪升职,估计早有了逼老王离职的想法,老王刚拿离职单就听见老板让HR招聘,说明老板早有预谋,画饼不过是一套说辞罢了。

2.老王的做法很正确,在职场中利用跳槽加薪也是常有的事,所以说无论在哪里上班一定要提升自己的能力,能力过硬才是硬道理,就算被算计离职了也能找到好工作。

3.新公司总监善于收拢人心,用了公司项目经理的正常薪资待遇,招聘了一个甘心为他出力的人才,所以职场上成功者都很有心机,特别是管理者,一定要懂得职场心机。

本文来自网络,不代表本站立场。转载请注明出处: https://tj.jiuquan.cc/a-2384600/
1
上一篇淘宝助理3(淘宝助理停止更新维护)
下一篇 为什么电脑老是死机(为什么电脑老是死机呢)

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: alzn66@foxmail.com

关注微信

微信扫一扫关注我们

返回顶部