Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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,我是编程新手,因为我在Java中使用了一些字符串,所以我想不出这个可能很简单的问题: 如果我们有方法: public static String str(String arg) { return arg; } 下面这两个样品有什么区别吗 System.out.println("Hello"); vs 什么东西处理得更快?使用不同方法的返回值或直接使用所选数据类型设置方法的参数更好吗?第二个样本是否有实际用途 如果这是一个愚蠢的问题,请表示感谢和抱歉。没有区别,只是第二个示例比较模糊,方法调

我是编程新手,因为我在Java中使用了一些字符串,所以我想不出这个可能很简单的问题:

如果我们有方法:

public static String str(String arg)
{
 return arg;
}
下面这两个样品有什么区别吗

System.out.println("Hello");
vs

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


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

没有区别,只是第二个示例比较模糊,方法调用没有增加任何值。运行以下代码:

"Hello".equals(Someclass.str("Hello"));
它将返回true,告诉您字符串是等价的

第二个示例中的所有方法都是获取传入的引用并返回它,因此代码

String s = "Hello";
System.out.println(Someclass.str(s) == s);
将打印真实;s和Someclass.str的返回值应该是相同的引用


不要拘泥于性能,试着编写有意义的代码。

没有区别,只是第二个示例比较模糊,方法调用没有增加任何值。运行以下代码:

"Hello".equals(Someclass.str("Hello"));
它将返回true,告诉您字符串是等价的

第二个示例中的所有方法都是获取传入的引用并返回它,因此代码

String s = "Hello";
System.out.println(Someclass.str(s) == s);
将打印真实;s和Someclass.str的返回值应该是相同的引用


不要拘泥于性能,试着编写有意义的代码。

第一种情况更快

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

使用双引号将自动创建
字符串
对象


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

第一种情况的速度更快

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

使用双引号将自动创建
字符串
对象


无论如何,在除最苛刻的场景外的所有场景中,可读代码远远超过了小的性能提升。

第一个
案例稍微快一点,使用第二个案例毫无意义,除非您在
Someclass
str
方法中修改字符串。

第一个
案例稍微快一点,并且除非您正在修改
Someclass
str
方法中的字符串,否则使用第二个字符串毫无意义。

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

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


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

在爪哇中,所有的参数都是通过值传递的。这包括对字符串等对象的引用。调用
str(String arg)
方法时,实际上并不是将字符串传递给该方法,而是指向该字符串在内存中位置的引用的副本。当您返回
arg
时,再次返回该字符串引用的副本

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


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

如果你是java新手,那么它很可能无关紧要,你应该使用哪个最可读。除此之外:第二个例子,如图所示,毫无意义。不确定案例2应该做什么。您是说您有一个名为Someclass的类,它有一个方法str(stringinput),该方法只返回它传递的相同字符串(“本例中的hello”)?如果是这样的话,首先,函数除了返回传递给它的输入外什么都不做是没有意义的,而case1会稍微快一点,因为case2必须调用某个类。您正在传递一个参数,然后返回相同的东西,为什么不使用原始的呢?案例2与案例1相同,但没有必要的额外步骤,因此它当然很慢。声明为变量的字符串和从方法返回的字符串之间没有区别——它们是相同类型的Java对象。第二种情况稍微慢一点,因为方法调用有开销。如果您是Java新手,那么这很可能无关紧要,您应该使用可读性最好的方法。除此之外:第二个例子,如图所示,毫无意义。不确定案例2应该做什么。你是s吗