码迷,mamicode.com
首页 > 其他好文 > 详细

03-操作符

时间:2018-10-28 22:01:24      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:其他   cycle   tab   截取   and   本质   根据   ring   order   

    这一篇相对简单,可提的东西不多,还是简单理了理,如下

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("\n-------");
    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-操作符

标签:其他   cycle   tab   截取   and   本质   根据   ring   order   

原文地址:https://www.cnblogs.com/likejiu/p/9867036.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!