• java中数据的传递方式到底是怎样的!


    今天早上我了一道有关java的题。主要考点是考java中值得传递方式。

    之前我在javaoo里总结的是:基本数据类型中保存的是实际的值,引用数据类型保存的是被引用的内存地址,那么基本数据类型就是按值传递,引用数据类型就是按地址来传递的。(难道我一开始就错了)

    题是真样的:

     1 public class SendValue{
     2     public String str="6";
     3     public static void main(String[] args) {
     4         SendValue sv=new SendValue();
     5         sv.change(sv.str);
     6         System.out.println(sv.str);
     7     }
     8     public void change(String str) {
     9         str="10";
    10     }
    11 }

    输出的结果是:?6

     有解释说:change方法里面是将传入的参数修改成10,但是并没有对SendValue的属性str就行修改,要修改必须指明this.str="10",所有答案还是6。

    还有一题是这样的:

     1 public class Example{
     2     String str=new String("hello");
     3     char[]ch={'a','b'};
     4     public static void main(String args[]){
     5         Example ex=new Example();
     6         ex.change(ex.str,ex.ch);
     7         System.out.print(ex.str+" and ");
     8         System.out.print(ex.ch);
     9     }
    10     public void change(String str,char ch[]){
    11         str="test ok";
    12         ch[0]='c';
    13     }
    14 }

    输出的答案是 : ?   hello and cb;

    有的解释说:String类是final类型的,不能继承和修改这个类。str=“tesk ok”,其实是隐含的让Java生成一个新的String对象,那么就与原来的“Hello”没有任何关系,当函数结束,str作用结束,所以输出的还是“Hello”。 char ch[] 是传递引用,修改了原内容。

    然后我上网查,java是按值传递还是引用传递,有的说:

    按值传递:指的是在方法调用时,传递的参数是按值的拷贝传递。就是说传递的是拷贝后的值,与前面那个值无关了。

    引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递前后都是同一个引用。

    但是又有人说这是不对的,他说Java中只有按值传递,没有按引用传递!

    各位大神们,给我解释解释嘛!

  • 相关阅读:
    Python 之 __new__() 方法与实例化
    Nvidia GPU架构演变
    图像增强之各种算子
    傅里叶变换 高通滤波 低通滤波
    SqlServer 把数据库表结构导出为Excel
    java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ 解决方案
    Navicat Premium 12中文破解版 32/64位 v12.1.22 已激活版
    windows下安装mysql-8.0.18-winx64的教程(图文详解)
    SQL Server中的分页查询 select top
    SQL server分页的四种方法(算很全面了)
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/5040805.html
Copyright © 2020-2023  润新知