Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String - Fatal编程技术网

Java 为什么要使用“一个”;“打印”;而不是三份工作?

Java 为什么要使用“一个”;“打印”;而不是三份工作?,java,string,Java,String,所以我对java知之甚少,但我注意到这是可行的,然后根据我的课堂笔记,我应该用不同的方式来做 这是我的笔记 System.out.print("hello"); System.out.print(name); System.out.print("\n"); 但是我试过了,它也做了同样的事情。它比较短,所以这是一种可以接受的方式,还是会破坏道路 System.out.print("hello"+name+"\n); 而且只要代码运行正常,我的老师就不会在意了,对吗?这是我的第一节课,我不是计算

所以我对java知之甚少,但我注意到这是可行的,然后根据我的课堂笔记,我应该用不同的方式来做

这是我的笔记

System.out.print("hello");
System.out.print(name);
System.out.print("\n");
但是我试过了,它也做了同样的事情。它比较短,所以这是一种可以接受的方式,还是会破坏道路

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

而且只要代码运行正常,我的老师就不会在意了,对吗?这是我的第一节课,我不是计算机科学专业的学生

第一个分别写入三个
字符串
对象。第二个将三个字符串合并(连接)为一个字符串,然后将其写出

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


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

它会起作用,我认为它实际上是一种更好的方法

加油,这就是黑客精神

如果您想要更简短、更具描述性的内容,请尝试

System.out.println("hello " + name);
println
将自动打印打印内容末尾的行尾('\n')


为了完成这一点,让我们假设
name=“James Gosling”

在笔记中编写的代码中,首先打印:

你好

然后,打印
名称
,这将导致:

小鹅

它是这样打印的,因为我们实际上在
“hello”
之后缺少了一个空格。要使用空格打印,请使用
“hello”
。最后,我们打印一个换行符

在(可以说是更好的)代码段中,只打印一次,但当使用表达式
“hello”+name+“\n”
时,您创建的新字符串是相同的。这是因为
+
运算符将两个字符串连接(即链接)起来,并使用结果创建一个新字符串

因此,当您打印结果字符串时,您会得到(加上换行符):

小鹅


其他人也参与了具体的例子,但试图概括这一点存在问题

+
应用于基本数值时进行加法,而不是应用于字符串时进行串联,因此

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
,然后换行

由于
+
,您可以使用
“+…
强制
+
表示字符串串联而不是加法

int x = 4;
int y = 2;
System.out.println("" + x + y);
在java中,加号(+)运算符是重载运算符。 这意味着+符号在应用于不同类型的数据时表示不同的含义。 如果使用字符串对象(这种情况下),则表示字符串连接

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

还有其他的打印方法

System.out.println() prints the argument and then insert a new line
所以为了得到同样的结果,你会写

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

Java还有支持C类打印的方法
System.out.printf()
System.out.format()

它们实际上是相同的。你可能会得到一些关于它们不同的微妙方式的答案,但如果这是你的第一个类,我认为最好理解它们在逻辑上是相同的,然后继续。(我可能会这样做:
System.out.println(“hello”+name);
只要代码运行正常,我的老师就不会在意了?
-这种情况很少发生。在这种情况下,你所拥有的一切都很好;但是,在很多情况下,你如何编写代码与它的运行情况同样重要。基本上,在第一次尝试中,你在第二次尝试时打印三个
字符串t、 您将3个
字符串组合成一个,并将其打印一次-结果相同。要写入的代码和读取/维护的代码更少;)字符串是不可变的,因此任何串联操作(例如str+“words”)将必须创建另一个对象。在循环中使用串联之前,这不是一个问题。这个问题提供了有关我评论的更多详细信息:如果运行
javap-c
分解代码,您将看到
a+b+c
被转换为一个表达式,该表达式分配
java.lang.StringBuilder
,calls追加了几次,然后对结果执行
toString
,因此额外分配的数量与
+
的数量无关。这已包含在我的bad中,我不知道该优化。我已删除了答案的这一部分。