发表于: 2018-05-20 15:52:38
1 1332
由于昨天加班太晚,没来得及学习,工程正式开工了,可能后面学习时间会少些了,但是我还是要尽量多学点。
今天完成的事:
今天也是对JAVA基础进行学习,今天主要学习的是Java Number 和Math 类。一开始对这个Java Number不太理解,因为一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。
像这样就可以定义变量:
int a = 520;
float b = 13.14f;
一开始觉得多此一举,还是后面通过学习了解到,Number类子类包括Integer、Long、Byte、Double、Float、Short,当在实际开发过程中,需要使用对象,而不是内置数据类型的情形时,这个时候使用内置数据类型就不行了。
同时,这里有一个装箱和拆箱的定义:这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。直接用例子说明。
public class Test {
public static void main(String[] args) {
Integer n1 = 128; // 装箱,相当于 Integer.valueOf(128);
int t = n1; //拆箱, 相当于 n1.intValue()
System.out.println(t);
}
}
或者像这样
public class Test{
public static void main(String args[]){
Integer x = 5; //装箱
x = x + 10; //拆箱
System.out.println(x);
}
}
当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。也就是说 Integer x = 5; 这样的X与int x=5;的不同是:int x=5;是内置数据类型,可以直接进行运算,而且它不能像对象那样使用,而Integer x = 5;不是内置数据类型,不能直接进行运算,需要进行拆箱后才能进行运算。举个例子:
Integer a1 = 5;
Integer a2 = 1;
System.out.println(a.equals(b)); // false
这样定义的a可以作为对象使用,可以调用方法。
然后这样定义的有一个问题,就是说对于–128到127(默认是127)之间的值,被装箱后,会被放在内存里进行重用,但是如果超出了这个值,系统会重新new 一个对象。在网上看到了这样一个例子:
Integer a = 10;
Integer b = 10;
System.out.println(a == b); // true
System.out.println(a.equals(b)); // true
Integer a = 128;
Integer b = 128;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
这个例子一方面表现出了== 和 equals 的区别,还有假如–128到127(默认是127)之间的值,被装箱后,会被放在内存,所以这个时候用==与equals都是ture,而当值超过这个范围,比如128的时候,装箱后则会建一个Integer实例,这个时候用==就会因为内存中值不一样而返回false, == 的比较 只有等号两边的值为同一值。也就是在内存中是同一个 才会返回true。对于equals还不能深入理解它能够返回true的原因,但是记住了两者的区别。
网上找到一个不错的关于==的讲解:
int a=10;
int b=10;
则a==b将是true。
但不好理解的地方是:
String a=new String( "foo ");
String b=new String( "foo ");
则a==b将返回false。
对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为 "foo "的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用 "== "操作符,结果会是false。
其实感觉对象变量这里,有点C语言指针的影子。a和b比较实质是其存数据的内存地址,由于地址不同,自然不相等,返回false.
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。直接用例子比较容易理解。主要记它的用法就行了。
public class Test {
public static void main (String []args) {
System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));
}
}
输出结果等于1
遇到的问题:
对于==理解应该差不多,就是它主要用于比较内存中的数据,而且两边相等才会返回true,而对于equals的理解还不算深入,网上的解释是equals主要用来比较对象的相等性,字符串的对比就需要equals。但是我觉得还是没有太理解equals,还有说不在字符类型使用equals时,它用于判断是否引用同一个对象,而假如需要判断内容是否相等,需要自己定义equals函数。
明天计划:
目前情况可能是没法跟着任务走了,时间太有限了,只期待实习结束了。在实习期只有有时间就学JAVA基础了。
评论