JavaSE基础知识(一)
前言
javase是java开发者必须熟练掌握的基础知识,我在这里把一些平常比较容易忽视的点记录下来,以便后面查阅。
一、数据类型转换
java数据类型主要分为两大类,基本数据类型和引用数据类型。基本数据类型分为四类八种基本类型,包括整数、浮点数、字符、布尔;引用数据类型主要为类、数组、接口等。
四类八种数据类型
1.1 自动类型转换
java在给数据类型赋值运算时,会自动将取值范围小的数据类型提升到取值范围大的数据类型(如byte、short、char运算时会自动提升为int)。
值得一提的是,b3=1+2这句,编译没有报错,前面我们说过byte、short、char运算时会自动提升为int,此时我们并没有进行强制转换,为什么没有报错呢?原因是1和2是常量,在编译时期已经确定他们相加不会超过byte的取值范围,编译器会将
他们相加的结果转为byte类型。而b4=b1+b2,编译就会报错,这是因为b1和b2是两个变量,编译器无法在编译时期确定他们的值,会将他们相加的值作为int类型处理,用byte来接收自然会报错了。
+=、-=、*=、/=这些复合赋值运算符,在运算时,会隐式的将int向下转为byte、short、char等类型,所以b4+=1语句不会报错。
1 public static void main(string[] args){ 2 byte b1=1; 3 byte b2=2; 4 byte b3=1 + 2; 5 byte b4=b1 + b2; 6 b4+=1; 7 system.out.println(b3); 8 system.out.println(b4); 9 }
1.2 强制类型转换
在将取值范围大的数据类型的值赋值给取值范围小的数据类型变量时,必须进行强制转换,将取值范围大的数据类型的值转换成取值范围小的数据类型,否则编译会报错,并且转换过程中会造成一定的精度丢失。
二、 参数传递
java方法的参数是以值的形式传递的,而不是引用传递。方法的参数类型是基本类型就传递数据值,方法的参数类型是引用类型的话传递的就是地址值。以下代码中 dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,
本质上是将对象的地址以值的方式传递到形参中。因此在方法中使指针引用其它对象时,那这两个指针此时指向的是完全不同的对象,在一方改变其所指向对象的内容时对另一方没有影响。
1 public class dog { 2 3 string name; 4 5 dog(string name) { 6 this.name = name; 7 } 8 9 string getname() { 10 return this.name; 11 } 12 13 void setname(string name) { 14 this.name = name; 15 } 16 17 string getobjectaddress() { 18 return super.tostring(); 19 } 20 } 21 public class passbyvalueexample { 22 public static void main(string[] args) { 23 dog dog = new dog("a"); 24 // dog@4554617c 25 system.out.println(dog.getobjectaddress()); 26 func(dog); 27 //dog@4554617c 28 system.out.println(dog.getobjectaddress()); 29 system.out.println(dog.getname()); // a 30 } 31 32 private static void func(dog dog) { 33 system.out.println(dog.getobjectaddress()); 34 // dog@4554617c 35 dog = new dog("b"); 36 system.out.println(dog.getobjectaddress()); 37 // dog@74a14482 38 system.out.println(dog.getname()); // b 39 } 40 }
如果在方法中改变对象的字段值会改变原对象该字段值,因为改变的是同一个地址指向的内容。
1 class passbyvalueexample { 2 public static void main(string[] args) { 3 dog dog = new dog("a"); 4 func(dog); 5 system.out.println(dog.getname()); // b 6 } 7 8 private static void func(dog dog) { 9 dog.setname("b"); 10 } 11 }
下一篇: 排骨炖豆角这么做,好吃又营养