之前分享一篇代码优化的文章:条件语句的多层嵌套成绩优化,助你写出不让同事吐槽的代码!
明天再次分享一些我日常任务中常用的代码优化技巧,希望对大家有协助!
注释 类成员与办法的可见性最小化举例:假设是一个private的办法,想删除就删除
假设一个public的service办法,或许一个public的成员变量,删除一下,不得思索很多。
运用位移操作替代乘除法计算机是运用二进制表示的,位移操作会极大地提高功用。
<< 左移相当于乘以 2;>> 右移相当于除以 2;
>>> 无符号右移相当于除以 2,但它会疏忽符号位,空位都以 0 补齐。
a = val << 3;
b = val >> 1;
尽量增加对变量的重复计算我们知道对办法的调用是有消耗的,包括创立栈帧、调用办法时保护现场,恢复现场等。
//反例
for (int i = 0; i < list.size(); i++) {
System.out.println("result");
}
//正例
for (int i = 0, length = list.size(); i < length; i++) {
System.out.println("result");
}
在list.size()很大的时分,就增加了很多的消耗。
不要捕捉RuntimeExceptionRuntimeException 不应该经过 catch 语句去捕捉,而应该运用编码手腕停止规避。
如下面的代码,list 能够会出现数组越界异常。
能否越界是可以经过代码提早判别的,而不是等到发作异常时去捕捉。
提早判别这种方式,代码会更优雅,效率也更高。
public String test1(List<String> list, int index) {
try {
return list.get(index);
} catch (IndexOutOfBoundsException ex) {
return null;
}
}
//正例
public String test2(List<String> list, int index) {
if (index >= list.size() || index < 0) {
return null;
}
return list.get(index);
}
运用部分变量可避免在堆上分配由于堆资源是多线程共享的,是渣滓回收器任务的主要区域,过多的对象会形成 GC 压力,可以经过部分变量的方式,将变量在栈上分配。这种方式变量会随着办法执行的终了而销毁,可以减轻 GC 的压力。
增加变量的作用范围留意变量的作用范围,尽量增加对象的创立。
如下面的代码,变量 s 每次进入办法都会创立,可以将它移动到 if 语句外部。
public void test(String str) {
final int s = 100;
if (!StringUtils.isEmpty(str)) {
int result = s * s;
}
}
尽量采用懒加载的策略,在需求的时分才创立String str = "月伴飞鱼";
if (name == "群众号") {
list.add(str);
}
if (name == "群众号") {
String str = "月伴飞鱼";
list.add(str);
}
拜访静态变量直接运用类名运用对象拜访静态变量,这种方式多了一步寻址操作,需求先找到变量对应的类,再找到类对应的变量。
// 反例
nt i = objectA.staticMethod();
// 正例
nt i = ClassA.staticMethod();
字符串拼接运用StringBuilder字符串拼接,运用 StringBuilder 或许 StringBuffer,不要运用 + 号。
//反例
public class StringTest {
@Test
public void testStringPlus() {
String str = "111";
str += "222";
str += "333";
System.out.println(str);
}
}
//正例
public class TestMain {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("111");
sb.append("222");
sb.append(333);
System.out.println(sb.toString());
}
}
重写对象的HashCode,不要复杂地前往固定值有同窗在开发重写 HashCode 和 Equals 办法时,会把 HashCode 的值前往固定的 0,而这样做是不恰当的
(责任编辑:admin)