Java中的按值传递

Java中的按值传递,java,string,pass-by-reference,parameter-passing,Java,String,Pass By Reference,Parameter Passing,有人能解释这些问题吗 什么是字符串[]。它是字符串对象还是包含对象数组的字符串对象 changeReference()和changeValue()函数做什么和返回什么 Java支持按引用传递吗 什么是字符串[]。它是字符串对象还是包含对象数组的字符串对象 两者都不是。它是一个引用字符串数组的对象(实际上是一种类型) Chanference和changeValue函数做什么和返回什么 请自己试试看效果 Java支持按引用传递吗 不,Java总是按值传递 String[]是字符串对象的数组 chan

有人能解释这些问题吗

  • 什么是字符串[]。它是字符串对象还是包含对象数组的字符串对象
  • changeReference()和changeValue()函数做什么和返回什么
  • Java支持按引用传递吗
  • 什么是字符串[]。它是字符串对象还是包含对象数组的字符串对象

    两者都不是。它是一个引用字符串数组的对象(实际上是一种类型)

    Chanference和changeValue函数做什么和返回什么

    请自己试试看效果

    Java支持按引用传递吗

    不,Java总是按值传递

  • String[]
    是字符串对象的数组
  • changeReference
    将数组的引用
    strings
    更改为新数组的引用,在本例中,新数组包含相同的内容,但内存中的引用位于另一个位置
  • Java中不支持按引用传递
  • strings
    String
    s的数组。数组是我们在这里使用的对象,这意味着它们是引用类型

  • changeReference
    没有任何用处。它接收对
    字符串的引用,但它通过值接收该引用。在函数中重新分配
    strings
    对传入的
    strings
    没有影响——它只是用对新数组的引用替换引用的本地副本<另一方面,code>changeValue
    修改
    strings
    引用的数组对象。因为它是引用类型,所以变量引用同一个对象

  • 否,不支持“按引用传递”。Java可以传递引用,但它是按值传递的。总之,您可以更改传入的对象,但不能以调用方可以看到的方式替换该对象

  • 什么是字符串[]。是一根绳子吗 对象或字符串对象包含 对象数组

    String[]
    是字符串数组(字符串是一个对象)

    更改了什么参考
    changeValue
    函数do和return

    changeReference()
    java中,将
    strings
    的引用更改为新的字符串数组。在
    changeValue()
    中,java更改
    strings
    数组的第一个元素的值

    Java支持按引用传递吗

    Java支持按值传递。如以下所述:

    Java确实通过 引用和所有对象变量 这些都是参考资料。然而,Java没有 通过引用传递方法参数;信息技术 按值传递它们


    你有没有尝试过自己用谷歌和/或Java书籍来解决这些问题?如果你愿意付出努力,这些问题的答案很容易找到。它总是通过价值传递,但价值是一个参考。请参见此处的原语按值传递,但引用对象(数组也按引用传递)只是为了澄清,Java中没有指针(如C中的指针),因此变量将其引用传递给对象;因此,将对象从
    a
    分配到
    b
    ,然后更改
    b
    也将更改
    a
    ,但是将新的
    对象分配到
    b
    不会更改
    a
    @YanickRochon抱歉,这是错误的。引用(因此数组)也是按值传递的。这是一个常见的混淆,但要想知道这是真的,只需看看OP代码的结果(更具体地说,是
    changeReference
    方法)。哦,我明白了。我也理解为什么不支持“通过引用传递”。我说的是真的。例如:
    String[]a=newstring[]{“foo”},b=a
    然后
    b
    指向与
    a
    相同的对象,而
    inti=1,j=i不是(因为它是一个基本类型),并且
    b[0]=“bar”
    将导致
    a[0]
    也打印“bar”,但是
    b=newstring[]{…}根本不会更改
    a
    import java.util.Arrays;
    public class Test {
        public static void main(String... args) {
            String[] strings = new String[] { "foo", "bar" };
            changeReference(strings);
            System.out.println(Arrays.toString(strings)); // still [foo, bar]
            changeValue(strings);
            System.out.println(Arrays.toString(strings)); // [foo, foo]
        }
        public static void changeReference(String[] strings) {
            strings = new String[] { "foo", "foo" };
        }
        public static void changeValue(String[] strings) {
            strings[1] = "foo";
        }
    }