使用"纯"有什么区别?从方法返回的字符串和字符串?

时间:2015-08-06 20:36:20

标签: java

我是编程新手,因为我在Java中使用了一些字符串,我无法弄清楚这个简单的问题:

如果我们有方法:

public static String str(String arg)
{
 return arg;
}

下面这两个样本之间有什么区别吗?

System.out.println("Hello");

VS

System.out.println(Someclass.str("Hello"));

什么处理更快?使用不同方法的返回值或直接使用所选数据类型来设置方法的参数是否更好?第二个样品有实际用途吗?

如果这是一个愚蠢的问题,感谢和抱歉。

4 个答案:

答案 0 :(得分:2)

没有区别,除了第二个例子更加混淆,方法调用没有添加任何值。运行以下代码:

"Hello".equals(Someclass.str("Hello"));

它将返回true,告诉您字符串是等效的。

第二个例子中的所有方法都是传入的引用并返回它,所以代码

String s = "Hello";
System.out.println(Someclass.str(s) == s);

将打印为true; s和Someclass.str的返回值应该是相同的引用。

不要注重性能,尝试编写有意义的代码。

答案 1 :(得分:1)

第一种情况更快。

第二种情况是荒谬的。您正在将String传递给一个方法,该方法只返回相同的String对象。绝对没有理由这样做。由于不必要的方法调用,它可能会慢一些。

使用双引号会自动创建String对象。

在任何情况下,除了最苛刻的场景外,可读代码远远超过小型性能提升

答案 2 :(得分:1)

第一个情况稍微快一些,除非您在Someclass的{​​{1}}方法中修改字符串,否则使用第二个情况毫无意义。

答案 3 :(得分:1)

在Java中,所有参数都按值传递。这包括对像Strings这样的对象的引用。当您调用str方法时,实际上并没有将String传递给方法,而是将引用的副本指向String在内存中的位置。当您再次返回str(String arg)时,您将向String返回此引用的副本。

在第二个示例中,您使用的是字符串文字。 Java以一种特殊的方式处理这些问题(编译器实际上创建了一个常量,并在代码中的任何地方用代替文字的常量替换)。因此,当您传入文字时,实际上是传递文字的引用(内存位置)的副本,然后返回它。仍然只有一个String对象。

换句话说,您所做的只是通过在中间插入方法调用来增加少量开销。