java中有三种方式向控制台输入信息,分别是print,printf,println,现在简单介绍一下他们之间的异同。

  • printf主要是继承了C语言的printf的一些特性,可以进行格式化输出
  • print就是一般的标准输出,但是不换行
  • println和print基本没什么差别,就是最后会换行

看一下他们的效果:


 

print:

java中print() Java中print和printf的区别_java中print()

结果:

java中print() Java中print和printf的区别_java中print()_02

 

从结果中可以明显看到,print输出内容之后,不会换行,光标定到最后一个字符之后。


 

 println:

java中print() Java中print和printf的区别_java中print()_03

结果:

java中print() Java中print和printf的区别_java_04

可以看到,每次执行完println之后,光标都会自动定位到下一行。

看看《Head First Java》怎样区别它们的?

java中print() Java中print和printf的区别_printf_05

还是很好区分的。


 

如果你学过c语言,对printf应该很是了解啦,我在这里再重复一遍。

什么是格式化输出呢?格式化输出就是向指定的地方(如:屏幕)输出指定格式的内容。

不同的语言对数据的格式化的表达形式稍微有点差别,java中一些数据的格式化形式:

'd' 整数 结果被格式化为十进制整数
'o' 整数 结果被格式化为八进制整数
'x', 'X' 整数 结果被格式化为十六进制整数
'e', 'E' 浮点 结果被格式化为用计算机科学记数法表示的十进制数
'f' 浮点 结果被格式化为十进制数
'g', 'G' 浮点 根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化。
'a', 'A' 浮点 结果被格式化为带有效位数和指数的十六进制浮点数

第一种的颜色是之适用整形,红色只适应浮点型,我为什么说这个呢?在c语言中能自动强制类型转换,所以,类型不对,程序也能正常运行,但在java中,类型不对程序就不能运行。我会在后边举例的。

再给从c语言阵营的一个小提醒:float 数据后必须跟 “f”,否则java会把数据看成double类型。

java中print() Java中print和printf的区别_java_06

举几个具体的例子展示一下java的各种格式化的输出:

1 public class Test{
 2         public static void main(String[] args) {
 3                 int i = 10;
 4                 float f = 10.0f;
 5                 double d = 10.0;
 6                 System.out.printf("%d %#o %#x \n", i, i, i);//你可以去掉#号试试效果
 7                 System.out.printf("%e %f %g %a \n", f, f, f,f);
 8                 System.out.printf("%e %f %g %a \n", d, d, d,d);
 9         }
10 }

 

看看效果:

java中print() Java中print和printf的区别_java_07

下边举个错误的例子:

1 public class Test{
2         public static void main(String[] args) {
3                 int i = 10;
4                 System.out.printf("%e \n",i);
5         }
6 }

 

看看会出现什么错误:

java中print() Java中print和printf的区别_java中print()_08

不合法类型转换异常,所以,写程序时要对号入座啊。

 

print, printf, println就说这么多啦,下边介绍一下从从控制台输入数据的方式,以后会在IO输入/输出时再详细介绍java的输入。

输出我们用的是System.out,那么又没有System.in呢?哈哈,有是有,但System.in只能获取字节,我们要想获得数字和字符串直接调用System.in是不能实现的,如果可以,你可以自己写个类封装一下System.in,实现获取数字与字符串的接口。你可能已经想到啦,java已经提供了这样的类:Scanner,你可以通过Scanner对象获取各种数据。

1 import java.util.Scanner;
2 public class Test{
3         public static void main(String[] args) {                
4                 Scanner s = new Scanner(System.in);//System.in作为Scanner构造函数的参数
5                 System.out.println(s.nextLine());//nextLine获取输入的数据直到遇见回车键,回车键也会接受
6                 System.out.println("over");    
7         }
8 }

 

java中print() Java中print和printf的区别_print_09

一定要注意那个注释部分回车键也会接受,否则会进入到一个小坑里呦,举个例子:

import java.util.Scanner;

public class Test{
        public static void main(String[] args) {                
                Scanner s = new Scanner(System.in);//System.in作为Scanner构造函数的参数
                
                int i = s.nextInt();
                System.out.println(i);
                
                System.out.println("please input a word:");//输入一个单词
                String str = s.nextLine();
                System.out.println(str);
                
                System.out.println("over");
                
        }
}

 

看结果:

java中print() Java中print和printf的区别_println_10

没有输入单词程序就结束啦,为什么呢?当你输入“100”数字时,敲回车结束,nextInt()函数不会接受回车键,但nextLine会接受缓存区里的数据和回车键,此时缓存区有个回车键,所以nextLine()接收了回车键,如果缓存区是空的会让你输入内容,所以,你应该明白了为什么你没有输入程序就结束了的原因了吧。


 

好啦,今天就写这么多。

我很想用心打造精品,但限于知识和语言表达能力,其中必有很多不足,望大家海涵啊。

java中print() Java中print和printf的区别_printf_11