Java的零碎知识

1.a+=ba=a+b的区别:

a+=b自带类型转换,而a=a+b由于有+运算符a+b会自动转换为int类型.举个例子:

1
2
3
short a = 1;
a = a + 1; //此句为错误的,因为a+1会返回一个int类型,int类型赋给a需要强制类型转换
a += 1; //此句正确,+=会自动类型转换,a依然是一个short型数据

2.&&&的区别:

结果一样,但是&两边都会执行,&&左边为false,右边不执行;|同理,两边都会执行,而||左边为true,右边不执行.

对于&&&,根据执行顺序,一旦左边为false,结果已经确定了为false;

对于|||,根据执行顺序,一旦左边为true,结果已经确定了为true;

3.变量length,方法size()和方法lenght()的区别:

4.String,StringBuilder和StringBuffer的区别:

5.countinue,break和return的区别:

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
// TODO 自动生成的方法存根
int n = 0;
while(n <= 10){
n++;
if(n == 3){
/*****插入三个之一*****/
}
System.out.print(n+"\t");
}
System.out.println("结束");
}
- 输入continue:输出 “1 2	4	5	6	7	8	9	10	结束”
- 输入break: 输出 "1	2	结束"
- 输入return: 输出 "1	2	"

可以知道,`continue`是跳过本次循环,但是循环依然执行;`break`是跳过本次循环,并且循环也结束;`return`是整个方法提前结束.

6.使用get和set方法与使用public修饰的属性的区别

1
2
3
4
5
6
7
8
9
10
public String name;

public void setName(String name){
this.name = name;
}
//使用时
//1.
student1.setName("canyuda");
//2.
student1.name = "canyuda"

通过方法可以给传递的参数进行分析,使程序更加灵活,可定制性更强.并且隐藏了成员变量,保证了代码的安全性.

7.代码规范-equals比较

建议使用 "test".equals(object) 来代替 object.equals("test") 防止出现空指针.

8.代码规范-浮点数计算

1
2
3
4
5
6
7
8
9
10
11
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;
if (a == b) {
// 不会进入本方法
}

Float x = Float.valueOf(a);
Float y = Float.valueOf(b);
if (x.equals(y)) {
// 不会进入本方法
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;
float diff = 1e-6f;
if (Math.abs(a - b) < diff) {
// 进入本方法
}

BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
BigDecimal c = new BigDecimal("0.8");

BigDecimal x = a.subtract(b);
BigDecimal y = b.subtract(c);

if (x.equals(y)){
// 进入本方法
}

9.代码规范-大数转换

使用构造方法 BigDecimal(double) 存在精度缺失风险, 建议使用 BigDecimal(String) 来解决 或者使用 BigDecimal.valueOf(double).