1.基本类型赋值与对象赋值有所区别
①基本类型赋值是将内容直接复制。
②对象赋值,是将对象的“引用”进行复制。例:
public class hh {
int s;
}
public class Hello {
public static void main(String[] args) {
hh a = new hh();
hh b = new hh();
a.s = 9;
b.s = 7;
System.out.println("a.s:"+a.s+"b.s:"+b.s);
a = b;
System.out.println("a.s:"+a.s+"b.s:"+b.s);
b.s = 10;
System.out.println("a.s:"+a.s+"b.s:"+b.s);
}
}
输出为:
a.s:9b.s:7
a.s:7b.s:7
a.s:10b.s:10
因为赋值操作的是对象的引用,所以修改b的同时改变了a。
若把“a = b” 改为“a.s = b.s”即可解决这个问题。
2.“==”和“equals()”的区别
①“==”比较的是栈中的内存地址(对于基本类型是比较内容,基本类型只要使用“==”和“!=”就够了)。
②“equals”比较的是栈指向的堆的内存地址。而String,Integer,Date在这些类中的equals有其自身的实现,而不再是比较在堆内存中的存放地址了。例:
public class hh {
int s;
}
public class Hello {
public static void main(String[] args) {
hh a = new hh();
hh b = new hh();
a.s = 9;
b.s = 9;
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(a.equals(b));
Integer n1 = new Integer(6);
Integer n2 = new Integer(6);
System.out.println(n1==n2);
System.out.println(n1.equals(n2));
}
}
输出:
false
true
false
false
true
3.字符串操作符“+”和“+=”的一个特性
如果表达式以一个字符串起头,那么后续所有操作数都必须是字符串型。例:
public class Hello {
public static void main(String[] args) {
int a = 9;
int b = 8;
String s = "a+b:";
System.out.println(s+a+b);
System.out.println(a+b+s);
System.out.println(b);
}
}
输出:
a+b:98
17a+b:
8
注意:第一个打印的语句中数字是98 而不是17,这是因为将int型自动转换成了字符串型。
4.逗号操作符在for语句中的用法
通过使用逗号操作符,可以在for语句内定义多个变量,但是它们必须具有相同的类型。例:
public class Hello {
public static void main(String[] args) {
for(int i=0,j=3;i<10;j++,i+=j){
System.out.println("j:"+j+"i:"+i);
}
}
}
输出:
j:3i:0
j:4i:4
j:5i:9
5.Foreach语句
foreach语句用于数组和容器,不用创建int变量去对序列进行计数,foreach将会自动产生一项。
foreach语句专门用于导出/引用数组。例:
public class Hello {
public static void main(String[] args) {
int a[] = new int[6];
int k=0;
for(int i=0,j=3;i<10;j++,i+=j){
a[k]=i;
k++;
a[k]=j;
k++;
System.out.println("i:"+i+"j:"+j);
}
for(int x:a)
System.out.print(x);
}
}
foreach语法:
for(int x:a)
定义了一个int类型变量x,将a中的每一个元素依次赋值给x。
输出:
i:0j:3
i:4j:4
i:9j:5
034495
本文章大量从《Think in Java》、实践和网络中总结。