Java 为什么要使用“一个”;“打印”;而不是三份工作?
所以我对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); 而且只要代码运行正常,我的老师就不会在意了,对吗?这是我的第一节课,我不是计算
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中,我不知道该优化。我已删除了答案的这一部分。