Java中变量命名和引用变量的一个问题

这次有两个主题,第一个太简单啦,就是Java中变量的命名规则,纯记忆性东西。第二个主题,就是讨论一下对象引用变量的一个注意点。

Java中变量命名和引用变量的一个问题

如果你对命名规则很熟啦,就直接看第二个内容吧。(上边的图稍微有点顺序紊乱啊)

一、Java中变量的命名规则

大多数语言的命名规则是相似的,只有一些微小的差别。

java中的关键字有:

  boolean   byte   char   double   float   int   long   short   public   private
  protected  abstract final    native   static   strictfp   synchronized   transient   volatile   if
  else     do    while    switch   case   default for   break   continue   assert
  class   extends   implements   import   instanceof   interface   new package   super   this
  catch   finally   try   throw   throws   return   void   const   goto   enum

Java的命名规则就说这么多,变量除了注意命名规则之外,还要注意命名规范。 

二、对象引用变量的注意之处

基本变量没有这个毛病,通过代码来引入问题。

1 public class Test { 2 public static void main(String[] args) { 3 int i1 = 10; 4 int i2 = i1; 5 i1 = 10000; 6 System.out.println("i1 = " + i1); 7 System.out.println("i2 = " + i2); 8 } 9

预测一下结果吧。OK,如你所料:

在看一段代码,如果预测结果正确,就不要往下看啦。

1 public class Test { 2 public static void main(String[] args) { 3 Test t = new Test(); 4 Test.Dog d1 = t.new Dog(1);//若看不懂,只需看成创建了一个Dog类一个实例变量 5 Test.Dog d2 = d1;//把d1赋值个d2,此时d2的age是不是1? 6 d1.age = 10;//重新为d1的age属性赋值成10 7 //打印结果 8 System.out.println("dog1's age = " + d1.age); 9 System.out.println("dog2's age = " + d2.age); 10 } 11 12 //为了节省空间能一眼看完,此处写成内部类 13 class Dog { 14 //为了方便把属性定义为public,实际中最好不要 15 public int age; 16 public Dog(int age) { 17 this.age = age; 18 } 19 20 } 21

猜猜结果:

猜对没有,为什么没有更改d2的age,d2的age从1变成了10?

基本变量中存的就是实际值,而对象引用变量中存的是一个能找到实际值得数据(可以看成C语言中的地址),所以,当d1赋值d2时,只是把那个能找到实际对象的数据赋值给了d2,内存中只有一个Dog的实例,d1,d2指向同个变量。

Java中变量命名和引用变量的一个问题

Java中变量命名和引用变量的一个问题

Java中变量命名和引用变量的一个问题

所以,d1改变object的值时,d2因指向相同的object,所以,结果就不言而喻啦。

这说得还远远不够,想深入了解,请找书看。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5698b5bd6f0efa326fe9dbbbe5b3a9fb.html