java2

思考一:

public class EnumTest {

public static void main(String[] args) {
Size s=Size.SMALL;
Size t=Size.LARGE;
//s和t引用同一个对象?
System.out.println(s==t); //    false
//是原始数据类型吗?
System.out.println(s.getClass().isPrimitive());
//从字符串中转换
Size u=Size.valueOf("SMALL");
System.out.println(s==u); //true
//列出它的所有值
for(Size value:Size.values()){
System.out.println(value);
}
}

}
enum Size{SMALL,MEDIUM,LARGE};

 

执行结果如下

  其中==是判断两个变量指向地址是否相等,所以s和u相等意味着两变量指向同一段地址,既枚举类型中变量实质是指向枚举类型中的数据存储地址。在实际判断中原始数据类型中大写的如:String,Enum都是引用数据类型,其他小写的如int,float则是原始数据类型。其中System.out.println(s.getClass().isPrimitive());不懂为何,getClass是得到原始类,isPrimitive字面意思应该是判断是非为原始数据类型,那么这个应该判断的是s是否为类中的原始数据,那么返回值可能为true或false,然而并没有Orz.......

数值的二进制表示

  

所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码10010= 反码11101 (10010,1为符号码,故为负)
(11101) 二进制= -2 十进制
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
 
java中数据存储的形式为补码。;

package demo;


import java.text.ParseException;

public class text {
public static void main(String[] args) throws ParseException {

int i = -1;
//使用包装类的toBinaryString转换成二进制
System.out.println(Integer.toBinaryString(i)); 

}
}

1的值应为16个0+1

所以-1的值为1+15个0+1;

则-1的反码码为1+15个1+0;

而-1的反码则为17个1;

如图所示补码正是如此。

测试 +0,-0;二者补码均为0,所以java中使用补码。

 

变量的作用域问题

package demo;


import java.text.ParseException;

public class text {

int i=3;
public static void main(String[] args) throws ParseException {

int i=2;
System.out.println(i);

}
}

输出结果为 2;

,局部定义的变量能够覆盖全局范围内的变量。在局部使用某个变量的时候JVM会优先找和当前使用位置"近"的变量的的定义!如果在局部定义了和全局变量一样的名字,我们使用的过程中,调用全局变量的话,会使用this关键字辅助。如:
class A{
int i=10;
void f(){int i=100;
System.out.println(this.i);//全局
System.out.println(i);//局部
}
}        //百度

java中数据转换

1字节8位;

byte 1字节 [-2^7,2^7-1]
short 2字节 [-2^15,2^15-1]

int 4字节[-2^31,2^31-1]
long 8字节 [-2^63,2^63-1]
float 4字节 [1.4013e-45,3.4028e+38]
double 8字节 [4.9e-324,1.7977e+308]
char 2字节 [0,2^16-1]
boolean 1字节

字节数占有数量多的向少的转换时会丢失数据,而少的向多的则不会
长整形向double,int向float会出现精度损失。

 

 

posted @ 2016-10-07 14:23  runningboys  阅读(148)  评论(0编辑  收藏  举报