System.out.println("Hello World");
结合上一篇学习static的文章可知,打印语句如果在一个类中多次调用的时候,我们可以把这个语句抽出来写成静态方法,然后通过导入静态包的方式调用这个打印方法。
package com.chenxyt.java.test;
public class Printer {
public static void print(String msg){
System.out.println(msg);
}
}
practice包下的TestStatic类:
package com.chenxyt.java.practice;
import static com.chenxyt.java.test.Printer.*;
public class TestStatic{
public static void main(String[] args) {
print("This is TestStatic");
}
}
a=4;
但是却不能将一个变量赋值给一个常数
4=a;
对于基本的数据类型,赋值操作没有引用的涉及,只是单纯的将一个值赋值给另一个值。例如a=b,当b再次被修改时,a不会受到影响,因为a与b相互独立。但是对于对对象的赋值来说,情况却大大不同,因为我们对对象的操作是操作了对象的引用,所以当一个对象赋值给另一个对象时,实际上是拷贝了引用到左值,也就是比如c和d是指向两个不同对象的引用,当c=d时,实际发生的情况是c和d都指向了原本只有d指向的对象。而c被赋值之后,原来的引用丢失了,它曾经所指向的不再被引用的对象被垃圾回收器回收了。如下例子创建了两个不同的对象,进行赋值操作。
package com.chenxyt.java.practice;
class Tank{
int level;
}
public class CopyTest{
public static void main(String[] args) {
Tank tk1 = new Tank();
Tank tk2 = new Tank();
tk1.level = 2;
tk2.level = 3;
System.out.println("tk1.level = " + tk1.level + "---tk2.level = " + tk2.level);
tk1=tk2;
System.out.println("tk1.level = " + tk1.level + "---tk2.level = " + tk2.level);
tk2.level=5;
System.out.println("tk1.level = " + tk1.level + "---tk2.level = " + tk2.level);
}
}
运行结果如下:
tk1.level=tk2.level
这样操作就可以保持两个对象本身相互独立。
package com.chenxyt.java.practice;
class Tank{
int level;
}
public class CopyTest{
public static void copy(Tank tk3){
tk3.level = 9;
}
public static void main(String[] args) {
Tank tk1 = new Tank();
tk1.level = 2;
System.out.println("tk1.level = " + tk1.level);
copy(tk1);
System.out.println("tk1.level = " + tk1.level);
}
}
运行结果,方法外部tk1对象的值被修改了
x+=4;
package com.chenxyt.java.practice;
public class OperationTest{
public static void main(String[] args) {
Integer itg1 = new Integer(22);
Integer itg2 = new Integer(22);
System.out.println(itg1==itg2);
System.out.println(itg1!=itg2);
int int1 = 22;
int int2 = 22;
System.out.println(int1==int2);
System.out.println(int1!=int2);
}
}
如上创建了两个Integer对象和两个int基本数据类型值,分别做“==”和“!=”判断,结果如下:
package com.chenxyt.java.practice;
public class OperationTest{
public static void main(String[] args) {
Integer itg1 = new Integer(22);
Integer itg2 = new Integer(22);
System.out.println(itg1.equals(itg2));
}
}
结果如下:
package com.chenxyt.java.practice;
class Oper{
int i;
}
public class OperationTest{
public static void main(String[] args) {
Oper op1 = new Oper();
Oper op2 = new Oper();
op1.i=2;
op2.i=2;
System.out.println(op1.equals(op2));
}
}
结果如下:
package com.chenxyt.java.practice;
public class OperationTest{
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 3;
System.out.println((a>b)&&(b>c));
System.out.println((a>b)||(b
运算结果如下:
package com.chenxyt.java.practice;
public class OperationTest{
public static void main(String[] args) {
int a = 6297;
int b = -6297;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(b));
System.out.println(Integer.toBinaryString(a>>5));
System.out.println(Integer.toBinaryString(a<<5));
System.out.println(Integer.toBinaryString(a>>>5));
System.out.println(Integer.toBinaryString(b>>5));
System.out.println(Integer.toBinaryString(b<<5));
System.out.println(Integer.toBinaryString(b>>>5));
}
}
我们以int类型6297为例,分别对正6297和负6297做三种位移操作,结果如下:
满足前边所说,左移低位补0,右移正数高位补0,低位补1,因为高位0没有实际意义,所以没有写出。同时,因为数据类型为int类型,所以最大长度为32位,超出的部分被截断了。
boolean-exp是一个布尔表达值,如果值为真,则返回value1的值,如果值为假,则返回value2的值。如:
package com.chenxyt.java.practice;
public class OperationTest{
public static void main(String[] args) {
int a = 5;
int b = a>10?a*100:a*10;
System.out.println("b===="+ b);
}
}
运行结果: