您的位置:首页 > 编程语言 > Java开发

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

2018-02-16 12:52 555 查看

一、==和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




可以看到虽然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<String> 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