java语法知识点对象的引用和对象本身的区别,

对象的引用和对象本身的区别:

  • java中没有指针的概念,取而代之的是引用(这个和c++中的引用不是一个意思),这个引用是一个变量而已,存放在栈里面(你可以理解栈和堆是计算机存储器中的不同位置,但是都是用类存储数据的),变量内容是它所指向的那个对象(存放在堆里)的起始地址
  • 举个例:Boy b = new Boy();
  • Boy是一个class,类只是一个对象构造方式的描述,需要new Boy()后,此时就根据这个类描述的构造规则实实在在构造出来了一个对象(对象是一个实体,会在存储器中实实在在占用一块内存(就像一个数组一样),里面包括了所定义的变量,函数等等),那么这一块内存有一个有个起始地址对吧,这个起始地址就赋值给了b这个变量,很明显b的内容就是一个地址而已,假如你的计算机是64位的,那么我们可以认为这个b变量就是64位的int型变量而已,给这个变量b取个名字,就叫做对象的引用
  • 上面的解释可能有些地方不是很严谨,但是原理完全是正确的,对于理解这个内容足够了

java中函数的形参会不会改变实参的内容:

  • 这里我举个例
  • void func(int a)
  • {  a=3;  }
  • int c=1;
  • func(c);     // 执行完后,此时c变量的值还是1,为什么呢,因为函数都是用值传递的方式
  • 记住c是基本类型数据(int,char,long,float等),所以呀,我们分析一波,发现这跟c语言一样嘛,肯定是交换不了的
  • 那怎么才能改变基本数据类型的实参的值呢,通过数组方式:

  • int c = 1;

  • int[] arr={c};

  • void func(int[] arr)

  • { arr[0] = 3;}

  • func(arr);  // 执行完后,c=3,因为是按照数组方式,实际上是传进来了数组的地址,那么函数里面相当于是对这个地址所指向的空间进行赋值,这不就是指针的原理吗,所以就能实现改变实参的值

 

  • void func(Boy a)
  • {  a.age = 3;  }
  • Boy c=new Boy(5);
  • func(c); 
  •    // 执行完后,引用c所指向的对象的内容已经变了,因为函数里面是对传进来的那个地址的内容做了改变,所以当然会影响形参所指向那个对象了,这里其实就跟c语言传进来了变量的地址(指针)是一个意思

你可能感兴趣的:(语法)