L的java学习笔记——关于运算符和循环的一些重点

一、==和equal()

在C\C++里,==符号的功能很明确,就是判断两个值是否相同。但是在java里,有一点不同。如果是基础数据类型定义的变量,那就是跟C\C++一样,判断两个变量的值是否相同。但是如果比较的是两个对象,那就不一样了。此时,==是判断两个对象的引用是否指向同一个对象,也即判断两个对象是不是同一个。举个例子可以直观了解。

public class operator {
    private int value;
    public operator(int value) {
        this.value=value;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        operator a=new operator(10);
        operator b=new operator(10);
        String str1="hello";
        String str2="hello";
        String str3=new String("hello");
        System.out.println("a.value==b.value is "+(a.value==b.value));
        System.out.println("a==b is "+(a==b));
        System.out.println("str1==str2 is "+(str1==str2));
        System.out.println("str1==str3 is "+(str1==str3));
    }
}

输出结果:
a.value==b.value is true
a==b is false
str1==str2 is true
str1==str3 is false

L的java学习笔记——关于运算符和循环的一些重点_第1张图片
可以看到虽然value是成员变量,但是value是基本数据类型,所以两个值相等时返回true。然而虽然a和b的value的值相等,但是a==b是false的,这是a和b是new出来的两个对象,根据调试结果可以看到a和b的id是不同的,说明是两个不同的对象,所以返回false。然后看str1和str2,发现结果返回true,有人就会问了,str1和str2不是分开定义的吗,怎么会是相等的?在String类型里,String类是维持着一个String池的,当在定义时不是用new时,java会在String池中寻找是否存在相同字符串的对象,如果有就返回它的引用,所以str1和str2是同一个对象的两个引用。那如何判断两个值相等呢?java的Object类提供了.equal()方法。

System.out.println(str1.equals(str3));

输出结果:
true

此时比较的就是两个对象的值。
总结:==比较的是两个对象的引用是否指向同一块堆内存,简单来说,判断两个对象是不是同一个。equal()比较的是两个对象的值。

二、java增强for循环

java增强for循环的语法为

for (Type value : array) {
    expression value;
}

value的声明类型必须和array元素一致。

import java.util.ArrayList;

public class example {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList list=new ArrayList<>();
        list.add("jia ling");
        list.add("feng gong");
        list.add("cai ming");
        for(String name:list) {
            System.out.println(name);
        }
    }
}

输出结果:
jia ling
feng gong
cai ming

*以上为个人总结,如有错误之处,还请大佬指出。

你可能感兴趣的:(java学习,java)