2014-03-12 57 views
6

所以我不知道很多关于Java,但我发现这个工作,然后根据我的课堂笔记我应该做它用不同的方式为什么使用一个“打印”而不是三个工作?

这里是我的笔记有

System.out.print("hello"); 
System.out.print(name); 
System.out.print("\n"); 

不过,我想这它也做同样的事情。它更短,所以这是一个可接受的方式来做到这一点,或将它打破了道路?

System.out.print("hello"+name+"\n); 

此外,只要代码运行正确,我的老师不应该在乎吗?这是我的第一堂课,我不是计算机科学专业。

+1

它们实际上是一样的。你可能会得到一些关于他们不同的微妙方式的答案,但如果这是你的第一堂课,我认为最好理解他们在逻辑上是相同的并继续前进。 (我可能会这样做:''System.out.println(“hello”+ name);') –

+1

'只要代码运行正常,我的老师不应该在乎吗?' - 这种情况很少。在这种情况下,你有什么好的;然而,在许多情况下,你如何编码一些东西与它的运行效果同等重要。 –

+5

基本上,在第一次尝试中,您在第二次尝试时打印三个“字符串”,您将3个“字符串”放在一起并打印一次 - 结果相同。编写和读取/维护的代码较少) – ochi

回答

9

它会工作,我会争辩说,这实际上是一个更好的方法来做到这一点。

去吧,这就是黑客精神!

如果你想要的东西,甚至更短,更描述,尝试

System.out.println("hello " + name); 

println将自动为您打印的内容最终打印一行结束(“\ n”)。


只要做到这一点,我们假设name = "James Gosling";

在写在笔记中的代码,第一次印刷:

你好

然后,您打印name,这会导致:

helloJames高斯林

它的印刷像那是因为我们实际上在"hello"之后错过了一个空格。要打印一个空格,请使用"hello "。最后,我们打印一个换行符。

在你的(可以说更好的)代码段中,只打印一次,但是当你使用表达式"hello"+name+"\n"时,你正在创建一个新的字符串,它最终是相同的。这是因为+运算符连接(即,)两个字符串并创建一个新字符串与结果。

所以,当你打印生成的字符串,你(加换行符):

helloJames高斯林

1

第一个写我们的三个String对象分开。第二个结合(连接)三个字符串到一个字符串,然后写出来。

这两种方法在语法(它们是有效的Java代码)和语义(它们是正确的)方面是同样有效的,它们都产生预期的输出并且执行的效果也一样好。

我认为你的方式更具可读性,因为它具有较少的重复性样板代码,所以我会说它更好。

+2

如果你运行'javap -c'来分解你的代码将会看到'a + b + c'被转换成一个表达式来分配一个'java.lang.StringBuilder',多次调用append,然后执行结果的'toString',所以额外分配的数量是独立于'+'的数量。这包括在[JLS第15章](http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.18.1.2) –

+0

我的不好,我没有了解该优化。我已经删除了这部分答案。 – joews

4

其他人也加入进来具体的例子,但也有尝试的问题推广这一点。

+当施加于原始数字值,而不是当施加至串做级联做加法,所以

int x = 4; 
int y = 2; 
System.out.print(x); 
System.out.print(y); 
System.out.print("\n"); 

打印42

int x = 4; 
int y = 2; 
System.out.println(x + y); 

打印6后跟行断。

由于+associates left,您可以使用"" + ...强制+意味着字符串连接,而不是另外

int x = 4; 
int y = 2; 
System.out.println("" + x + y); 
2

Java中的加号(+)运算符重载的一个。 这意味着+符号应用于不同类型的数据时意味着不同的事情。 如果你使用String对象(这是实例),它意味着字符串连接。

因此,这行代码System.out.print("hello"+name+"\n);将String对象“hello”与String对象名称连接起来,然后与String对象“\ n”连接。最后它将结果输出到标准输出。

还有其他的打印方法。

System.out.println() prints the argument and then insert a new line 

所以有相同的结果,你会写

System.out.println("hello" + name); 

Java有同样的方法System.out.printf()System.out.format()支持类似C的打印。

+0

现在读入重载的方法,很酷的答案 – Laura

+1

谢谢劳拉。 – user3413094

相关问题