i++
package practice;
/**
* 先运行static 初始块
* 但是由于 int x=5;在代码块里属于局部变量运行完 x,y还是等于初始值0
* 再运行main x,y为static只有一份
* @author liu
*
*/
public class Test6 {
static {
int x=5;
}
static int x,y;
public static void main(String[] args) {
x--;
myMethod();
System.out.println(x + y++ +x);
}
public static void myMethod(){
y=x++ + ++x;
}
}
package practice;
public class Test7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int j=0;
for(int i=0;i<100;i++){
j=j++;
//j=++j;//结果为100
}
System.out.println(j);//结果为0
/**j++相当于
*0 temp=j 0;
*1 j=j+1 0+1;
*0 j=temp 0;
*因为Java用了中间缓存变量机制
*/
}
}
package practice;
public class Test8 {
public static void main(String[] args) {
int a=5,b=3;
if(!(a==b)&&(a==1+b++)){
}
System.err.println(a+","+b);//5,4
}
}
package practice;
public class Test9 {
public static void main(String[] args) {
int i=0;
i=i++ + ++i;
System.out.println("i:"+i);
int j=0;
j=j++ + ++j +j++ +j++;
System.out.println("j:"+j);//0+2+2+3=7
int k=0;
k=k++ +k++ +k++ + ++k;
System.out.println("k:"+k);//0+1+2+4;
int h=0;
h=++h + ++h;
System.out.println("h:"+h);//1+2;
int q1=0,q2=0 ;
int p1 = 0,p2=0;
q1=++p1;
q2=p2++;
System.out.println("q1:"+q1);//1
System.out.println("q2:"+q2);//0
System.out.println("p1:"+p1);//1
System.out.println("p2:"+p2);//1
}
}
j:7
k:7
h:3
q1:1
q2:0
p1:1
p2:1
类型转换
package practice;
public class Test10 {
public static void main(String[] args) {
//byte char short 同级别不能相互转换 可以强制转换
//低级向高级 会转换成对应的ASCLL码值
char c='c';
int i=c;
System.out.println("output:"+i);
short a=99; char b=(char)a;
System.out.println("output:"+b);
int d=99;byte e=(byte)i;char f=(char)d;//可能会导致精度下降
System.out.println("output:"+e +" and " +f );
float g=100.00f;
Float F1 =new Float(g);
Double d1=F1.doubleValue();
System.out.println(d1);
int j=034;
int k=(int)056L;
//int l=078;//一些编程语言中常常以数字0开始表明该数字是八进制
int m=012;
int n=101110;
System.out.println(m);
System.out.println(j);
System.out.println(k);
System.out.println(n);
/**
* ;由于 += 是Java语言规定的运算符,java编译器会对
* 它进行特殊处理也就是自动进行强制类型转换,因此可以正确编译。
*/
short s=1;
//s=s+1;出错
s=(short) (s+1);
short s2=1;
s2+=1;
}
}
output:99
output:c
output:99 and c
100.0
10
28
46
101110
运算符
package practice;
public class Test11 {
public static void main(String[] args) {
/**三目运算符
* s=a?b:c
*/
int i=42;
String str =(i<40)?"life":(i>50)?"universe":"everything";
System.out.println(str);
// boolean b=true?false:((true==true)?false:true);
/**true==true?true:false;--》eclipse提示 dead code 参考博客
* :
* http://blog.csdn.net/nokia_lc/article/details/53739701
* 这段代码就不会被执行到
*/
boolean b=true?false:true==true?true:false;
System.out.println(b);
System.out.println("-------------------------------");
int a=5;
System.out.println("value is :"+((a<5)?10.9:9));
System.out.println("value is :"+((a<5)?10:9));
System.out.println("value is :"+((a==5)?10:9.3));
//java根据运算符精度类型进行了自动类型转换
char x='x';
int d=10;
System.out.println(false?d:x);
System.out.println(false?10:x);
}
}
everything
false
-------------------------------
value is :9.0
value is :9
value is :10.0
120
x
package practice;
public class Test12 {
public static void main(String[] args) {
int m = 5, n = 5;
if ((m != 5) && (n++ == 5)) {
}
System.out.println("a." + n);
n = m = 5;
if ((m != 5) & (n++ == 6)) {
}
System.out.println("b." + n);
n = m = 5;
if ((m == 5) || (n++ == 5)) {
}
System.out.println("c." + n);
n = m = 5;
if ((m == 5) && (n++ == 6)) {
}
System.out.println("d." + n);
n = m = 5;
int a = 1, b = 2;
int c = a & b;
System.out.println("a&b" + c);
/**
* &,| 非短路运算
* &&,||短路运算
* 位运算
* a的二进制 a 0 0 0 1
* b的二进制b 0 0 1 0
* a&b 0 0 0 0
*
*/
//移位操作符右边的参数要进行模的32运算,并且移位是对二进制的操作
//而二进制中8位是一个循环,所以,num>>32 等于num>>0,num>>33 等于num>>1
int num =32;
System.out.println(num>>32);//结果为32
int num2 =33;
System.out.println(num>>33);//结果为16
}
}
异常:
http://blog.csdn.net/hguisu/article/details/6155636#