您好,欢迎来到微智科技网。
搜索
您的当前位置:首页JAVA中的指针

JAVA中的指针

来源:微智科技网

  不同于CPP,JAVA中不需要程序员对指针进行操作。不过,这不代表JAVA没有指针,事实上,JAVA的指针操作都被底层代码封装了。笔者在初学Java时,虽然就了解了形参,实参,StringBuffer这些概念,但一直只流于表面,对此没有一个深度的认识。直到最近开始学习JVM虚拟机,才真正认识到了JAVA的精妙之处。

package point;

public class Formal {
    private void formal(int p){
        p=p*5;
        System.out.println(p);
    }

    public static void main(String[]args){
        int i=5;
        Formal fromal=new Formal();
        fromal.formal(i);
        System.out.println(i);
    }
}

  这段代码在控制台输出的结果是25和5,很显然,按照正常的逻辑来说的话应该是25,25才对。为什么会出现这种结果?事实上,Java中对基本数据类型的传递都是值传递(不清楚为什么这样,笔者的理解是基本数据类型在内存中的组合是有限的,这样内存可以知道你需要传递的是什么,换而言之,它可以真正理解你要传递的东西,因此可以复制一份进行传递,这样虽然会增大程序员的学习成本,但可以节省内存或者是增进效率。而非基本数据类型因为变化太多了,所以无法这么操作。不知道本人的理解有没有误差,才疏学浅,希望大神们多多指正)。通俗一点说,就是复制操作,在内存中,JVM只是把你操作的数据复制了一份给你传递到的对象,而不是把它本身传递了过去。

  这里要说一个特例,String类,贴一段代码。

package point;

public class ActualString {
    private void actual(String color){
        color=color+" is red";
        System.out.println(color);
    }

    public static void main(String[]args){
        String car="myCar";
        ActualString actualString =new ActualString();
        actualString.actual(car);
        System.out.println(car);
    }
}

  这里控制台输出结果是myCar is red,myCar,这不代表String传递的也是形参,或者是String是基本数据类型,事实上因为String类都是被final关键字修饰的,所以它的值不会变化,所以,字符串拼接之类的操作事实上只是在内存中开辟了一个新的空间,而原有的空间其实还存在,所以这就是为什么字符串的操作要使用StringBuffer类。

  下面我们看一下实参的代码。

package point;

public class Actual {
    private void actual(int arr[]){
        arr[0]=arr[0]*5;
        System.out.println(arr[0]);
    }

    public static void main(String[]args){
        int a[]=new int[]{5};
        Actual actual=new Actual();
        actual.actual(a);
        System.out.println(a[0]);
    }
}

  

package point;

class Variable{
    public static Variable VAR=null;

    public int i;

    protected void a(int p){
        p=p*5;
        System.out.println(p);
    }

    public Variable(){
        i=5;
        Variable.VAR=this;
    }


}

public class FormalInActual {
    public static void main(String[] args){
        Variable variable=new Variable();
        System.out.println(variable.i);
        variable.a(variable.VAR.i);
        System.out.println(variable.VAR.i);
    }

}

  输出结果是5,25,5。即使是像这样把基本数据类型写进方法里,通过方法传递,其传递的依旧是形参。

转载于:https://www.cnblogs.com/CNty/p/10913844.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务