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.......
数值的二进制表示
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会出现精度损失。