在return语句中使用关键字“new”

时间:2015-08-14 16:53:10

标签: java

我从未见过返回语句中使用的关键字“new”,而我对new的理解是它创建了一个新对象。在此上下文Practice permutation = new Practice();中使用的“new”是它创建一个名为permutation的新对象。 permutation是对某些内存地址的引用。那么,return new String(content)可能会返回一个内存地址?所以我的问题是,在这种情况下new实际上意味着什么?我为我的noob问题道歉...

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"));
    }
}

5 个答案:

答案 0 :(得分:3)

return new String(content);表示它使用您传递的内容创建一个新的字符串对象。它类似于

String str = new String(content)
return str;

答案 1 :(得分:1)

此:

return new String(content);

(逻辑上)与此相同:

String result = new String(content);
return result;

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

答案 2 :(得分:1)

return new String(content);

做了三件事:

1)在内存中的某处创建String对象

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

3)它将此引用返回给调用者。

相同
s = new String(content);
return s;

答案 3 :(得分:1)

你的理论是正确的,但你对变量的理解有点偏离(以一种非常常见的方式......)一个对象永远不会有名字;它独立于任何涉及它的变量 1 Practice permutation = new Practice();做了三件事:

  • 它会创建一个新的Practice对象
  • 它创建一个可能引用Practice对象
  • 的新变量
  • 它使变量实际引用新对象

请注意permutation不是对象的名称;它是变量的名称,变量引用到对象。您可以创建几个引用同一对象的变量,并且可以创建一个任何东西都没有引用的对象 - 后者是return new中发生的事情。

1 是否有任何对象 的引用都有效,因为未引用的对象可能被垃圾收集 - 但这是一个更高级的主题。< / p>

答案 4 :(得分:1)

使用关键字 new 时,不应将其与任何赋值运算符相关联。例如, new 关键字的作用是,它创建对指定类的新实例的引用并返回它。所以当你把陈述

new Object();

该语句完全有效,它返回对Object类的新引用。唯一的事情是引用没有设置为任何东西,因为没有操作符在其上执行。所以,当你有

Object myObj = new Object();

引用来自 new Object()语句,equals运算符将其设置为等于myObj变量。所以现在,如果你理解了,那么当你有

return new Object();

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