Java 之多态

Java 之多态(包含封装)

基础知识:

Java 在处理基本数据类型(例如int ,char,double)时,都是采用按值传递的方式执行,除此之外的其它类型都是按引用传递的方式执行。对象除了在函数调用时时引用传递,在使用“=”赋值时也是采用引用传递。

代码示例:

class TempTest1 {
    static class A {
        int age = 0;			// 值传递
        // num是基本类型,值就直接保存在变量中。
    }
    public static void main(String[] args) {
        A a = new A();
        // 这个a就是一个引用类型变量。引用指向实际对象,实际对象中保存着内容。
        a.age = 20;
        System.out.println(a.age);
    }
}

class TempTest2 {
    private void test1(int a){  // 值传递
        a = 0;					// 值传递
        System.out.println(a);
    }
    public static void main(String[] args) {
        TempTest2 t = new TempTest2();
        // 这个t就是一个引用类型。引用类型指向一个对象而不是原始值,指向对象的变量是引用变量。
        int a = 20;				// 值传递
        t.test1(a);
    }
}

前辈原话:

一:搞清楚 基本类型 和 引用类型的不同之处

int num = 10;
String str = "hello";

如图所示,num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为"引用",引用指向实际对象,实际对象中保存着内容。

二:搞清楚赋值运算符(=)的作用

num = 20;
str = "java";

对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。

如上图所示,"hello" 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)

后续请参考原文


注:本人正在学习状态,文中多有引用,也有解释纰漏之处,敬请包涵、指正!

参考:

https://www.zhihu.com/question/31203609

http://blog.csdn.net/wenwen091100304/article/details/46673865

感谢:usna 提供思路和方向

posted @ 2017-06-01 23:01  季文康  阅读(216)  评论(0编辑  收藏  举报