03-操作符
Posted likejiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03-操作符相关的知识,希望对你有一定的参考价值。
这一篇相对简单,可提的东西不多,还是简单理了理,如下
1,操作符i++和++i的区别?
i++和++i的区别是前者是获取i的值再加1返回则是i;后者i先加1再获取i则返回的是i+1的值。但i本质是都进行值加1了
举例如下:
int i=1; System.out.println(i++);//输出:1 即i++表示先获取变量值,再做加法,即本行代码获取结果为1,i的最终结果为2 System.out.println(++i);//输出:3 即++i表示先做加法,再获取变量值,即本行代码获取结果为3,2+1=3 System.out.println(i);//输出:3 i值为3 System.out.println("-------------"); i=1;//重置 System.out.println(++i);//输出:2 i先做加法,1+1=2 System.out.println(i++);//输出:2 先获取值再加,即i=2 System.out.println(i);//输出:2
以上实例可以得出现后获取值的区别。
举例2,for循环中i++和++i的区别
@Test public void cycleTest(){ for (int i = 0; i < 5; i++) { System.out.print(i); } System.out.println(" -------"); for (int i = 0; i < 5; ++i) { System.out.print(i); } //结果一样,原因是因为无论i++,++i,只不过取值结果先后不一样,但是i本身加法后结果值一样 } 01234 ------- 01234
实际是无区别,原因是因为无论哪种i都进行了加1
2,包装类和String以及自定义对象的equals的区别?
包装类和String的hashCode值都是根据自身的值生成的,其他对象是根据内存地址生成的,通过equals方法比较值。例如:
public static void equals(){ String s1=new String("123"); String s2=new String("123"); System.out.println(s1==s2);//false System.out.println(s1.equals(s2));//true System.out.println("s1: "+s1.hashCode()+" ,s2: "+s2.hashCode());//s1: 48690 ,s2: 48690 Integer it1=new Integer(1); Integer it2=new Integer(1); System.out.println(it1==it2);//false System.out.println(it1.equals(it2));//true System.out.println("it1: "+it1.hashCode()+" ,it2: "+it2.hashCode());//it1: 1 ,it2: 1 Long l1=new Long(1); Long l2=new Long(1); System.out.println( l1==l2);//false System.out.println(l1.equals(l2));//true System.out.println("l1: "+l1.hashCode()+" ,l2: "+l2.hashCode());//l1: 1 ,l2: 1 HandlerTest ht1=new HandlerTest(1); HandlerTest ht2=new HandlerTest(1); System.out.println( ht1==ht2);//false System.out.println(ht1.equals(ht2));//false System.out.println("ht1: "+ht1.hashCode()+" ,ht2: "+ht2.hashCode());//ht1: 2131463427 ,ht2: 1331101982 // 包装类和String都是根据值生成hashCode,通过equals可以比较。 }
在包装类和String虽然值相同,但对象不同,所以针对对象比较不能使用==,可以通过equals方法进行对比。
覆写equals方法
1,需要在自定义的对象覆写equals方法,指定某字段的值作为比较对象。如下:
class HandlerTest{ int i; String uniqueRule; public HandlerTest(int i){ this.i=i; } public HandlerTest(String uniqueRule){ this.uniqueRule=uniqueRule; } //覆写equals方法,指定uniqueRule的值作为比较对象,当uniqueRule值相等的对象,equals比较相等 @Override public boolean equals(Object obj) { return obj instanceof HandlerTest &&uniqueRule!=null&& uniqueRule.equals(((HandlerTest)obj).uniqueRule); } }
运行:
@Test public void equalsOverride(){ HandlerTest ht1=new HandlerTest("hello"); HandlerTest ht2=new HandlerTest("hello"); System.out.println( ht1==ht2);//false System.out.println(ht1.equals(ht2));//true } 结果: false true
3 三元操作符
语法:boolean-exp ? value0:value1 ,等同于if-else
4 总结
本篇还有:1,字符串操作符+=;2,类型转换操作符,例如浮点小数被int类型接收时,截取小数,还有例如编译器在必要的时候会自动int值到long值的提升等等。
以上是关于03-操作符的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
VSCode自定义代码片段15——git命令操作一个完整流程