请问各位Java大师解析一下这里的 this. name= name this. age=age是

Python020

请问各位Java大师解析一下这里的 this. name= name this. age=age是,第1张

这个怎么给你解释呢 ......

name,age就是一个形参,也就是你调用的new Cat("小花",2)时,会将小花先存到name中,2先存到age中,此时的this.name和this.age还是空的 ,只有在构造函数中执行了赋值,你才能调用get()方法获取。当然你也可以建个无参构造函数,通过set()方法来进行赋值,但是调用时就不能直接给参数了,而是通过显示的调用set()方法将参数传递进去。至于构造函数和普通函数有什么区别,先自行百度一下吧,多百度几个,多读一些类似博文性质的文章比较好,他会讲的比较透彻,三言两语也给你说不清楚,最多只能给你说一些特点,至于怎么用你还是不懂。

既然你问了,就给你说明白点:

*******************

String str="abc"*这种情况是引用数据类型,引用数据类型肯定存放在堆中 栈中放置的是参数变量而不能放对象 对象只能放在堆中

*******************

它只创建一个对象 在堆中创建一个对String类的对象引用变量str(引用变量肯定是存放在堆里的),然后查找栈中是否有"abc",若没有则将"abc"存放进栈,并令str指向"abc",若已经存在则直接令str指向"abc".(也就是说引用变量本身只能存放在堆中 它的值是所指向的字符串abc 它的地址存放在栈中) 它创建多个"abc"字符串在内存中其实只存在一个对象而已,这样有利于节省内存空间同时在一定程度上提高程序运行速度

******************************

String str=new String("abc")* 所有通过new操作符的操作都是在堆完成的

******************************

它创建两个对象 abc对象和str引用对象 两个必须存放在堆中 str指向堆中的abc对象 也就是说 两个对象和str的地址全部存放在堆中 因为使用了new操作符 所以下面的例子里str2,str3和str4即使是值都为abc因为str2的地址在栈中 str3和str4的地址各自开辟空间 所以他们的地址肯定不一样了

但是它们的值是一样的 那就是abc

*******

equals:* equals就是比较值 ==在基本类型里也是比较值 在引用类型里是比较地址 注意这个区别就OK了!

*******

表示堆中的引用变量的值是否相同(引用类型变量比较的是他们本身的值,本身的值是通过引用变量地址指向的对象或字符串来得到的,不管这个被指向的字符串或者对象是在栈中还是堆中)

****

==:*

****

表示堆中或者栈中的基本类型的值或者引用变量的地址是否相同(基本类型比较的是他们本身的值,引用类型变量比较的是地址)

当equals为true时,==不一定为true;

String str1 = "abc"

String str2 = "abc"

System.out.println(str1==str2)//true

String str3=new String ("abc")

String str4 =new String ("abc")

System.out.println(str3==str4)// false

----------------------我是分割线---------------------------------

理解下堆和栈的区别

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放

4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区—存放函数体的二进制代码。