Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用关键字";新";在返回语句中_Java - Fatal编程技术网

Java 使用关键字";新";在返回语句中

Java 使用关键字";新";在返回语句中,java,Java,我从未见过在return语句中使用关键字“new”,我对new的理解是它创建了一个新对象。以及在本上下文中使用的“新”Practice permutation=new Practice()是指它创建了一个名为permutation的新对象。排列是对某个内存地址的引用。所以,返回新字符串(内容)是否返回内存地址?所以我的问题是,在这个上下文中使用的new实际上意味着什么?我为我的问题道歉 import java.util.Arrays; public class Practice { p

我从未见过在return语句中使用关键字“new”,我对new的理解是它创建了一个新对象。以及在本上下文中使用的“新”
Practice permutation=new Practice()是指它创建了一个名为
permutation
的新对象。排列是对某个内存地址的引用。所以,
返回新字符串(内容)
是否返回内存地址?所以我的问题是,在这个上下文中使用的
new
实际上意味着什么?我为我的问题道歉

import java.util.Arrays;

public class Practice {
    public String sort(String s) {
        char[] content = s.toCharArray(); 
        Arrays.sort(content);
        return new String(content);
    }

    public static void main(String[] args){
        Practice permutation = new Practice(); 
        System.out.println(permutation.sort("hello"));
    }
}
返回新字符串(内容)
表示它使用您传递的内容创建一个新的字符串对象。类似于

String str = new String(content)
return str;
这:

(逻辑上)与此相同:

String result = new String(content);
return result;
它只是跳过了将值存储在变量中的步骤,并直接返回它。没有什么不同的事情发生,一个新对象被实例化,一个对象被返回

return new String(content);
做三件事:

1) 在内存中的某个位置创建
String
对象

2) In在当前线程的堆栈中创建指向它的指针(或引用)

3) 它将此引用返回给调用方

s = new String(content);
return s;

你的理论是正确的,但你对变量的理解有点偏离(以一种非常常见的方式…)一个对象从来没有名字;它独立于任何涉及it1的变量而存在<代码>实践排列=新实践()做三件事:

  • 它创建了一个新的
    练习
    对象
  • 它创建一个新变量,该变量可能引用
    实践
    对象
  • 它使变量实际引用新对象
请注意,
permutation
不是对象的名称;它是变量的名称,变量引用对象。您可以创建多个引用同一对象的变量,也可以创建一个不被任何对象引用的对象,后者就是在
return new
中发生的情况

1是否存在对对象的引用确实会产生影响,因为未引用的对象可能会被垃圾收集,但这是一个更高级的主题。

使用关键字new时,不应将其与任何赋值运算符关联。用外行术语来说,new关键字的作用是创建对指定类的新实例的引用并返回它。所以当你把声明

new Object();
该语句完全有效,并返回对对象类的新引用。唯一的问题是引用没有被设置为任何值,因为没有操作符对它执行操作。所以当你有

Object myObj = new Object();
return new Object();
引用来自new Object()语句,equals操作符将其设置为myObj变量。所以现在,如果你明白了,当你

Object myObj = new Object();
return new Object();

引用再次来自new Object()语句,return关键字获取该引用并将其从所使用的方法中返回。

将您解释的相同置换理论应用于new之后定义的类。
new
创建一个对象。您正在返回一个新对象
returnnewstring(content)
将返回以
content
作为参数haha构造的字符串对象。非常感谢。所以,当我做
stringresult=newstring(content),我不知怎么把一个字符数组放入一个字符串?这里有什么演员表演吗?再次为noob的问题感到抱歉…@Jae:String的一个构造函数接受一个char[]
:您所做的只是使用它的一个构造函数实例化一个新的
String
对象。谢谢您的帮助!谢谢你回答我的问题!哇!非常感谢你。我只是想向你们解释一下,以确保我能理解。所以Practice是一个类,permutation是一个变量,它保存对Practice对象的引用(或内存地址?)。这个实践对象和实践对象的成员变量和方法一起存储在堆的某个地方?是这样吗?某种程度上?@Jae:是的,只是对象只包含其成员变量的值。这些方法的代码只需要存储一次,因此将存储在类中。当您调用例如
permutation.sort(“foo”)
时,Java会(在幕后)将
permutation
中的对象引用作为参数发送给
sort
方法,以便该方法知道要对哪个对象进行操作。在方法内部,您可以使用
this
来获取该引用。我明白了。。。谢谢你的解释,非常清楚。还有一个问题,那么类存储在哪里?它是否存储在堆栈中?@Jae:类元数据本身存储在(PermGen)中,这是Java虚拟机中的一个单独的内存区域。@AsifMushtaq:
ArrayList a=new ArrayList();阵列列表b=a
-现在,
a
b
引用相同的
ArrayList
对象,如果您通过
a
b
对列表进行任何更改,则更改将通过另一个变量可见:
a.add(42);系统输出println(b.get(0))