控制台字符读取问题

我们在控制台读取字符串的代码:

	BufferedReader bufread = new BufferedReader(new InputStreamReader(System.in));
		String str = "";
		int i = 0;
		while (!(str= bufread.readLine()).equals("q"))
		{
			//为什么要用Q来控制结束, 不能用==符号。java所用的都是地址引用,
			System.out.println(i);
		}
		System.out.println(i);

如果我们把代码改成(不能结束)

while ((str=bufread.readLine())!=null)
		{
			
			System.out.println(i);
		}
		System.out.println(i);

或者改成这样(一直无法输入结束)

while ((str=bufread.readLine())!="q")
		{
			//为什么要用Q来控制结束呢? 不能用==符号。
			System.out.println(i);
		}
		System.out.println(i);


特别

1. ==可以用来比较基本类型和引用类型,判断内容和内存地址

2. equals只能用来比较引用类型,它只判断内容。该函数存在于老祖宗类 java.lang.Object

Java空字符串与null区别:

Java空字符串与null区别:

1、类型
null表示的是一个对象的值,而并不是一个字符串。例如声明一个对象的引用,String a = null ;
""表示的是一个空字符串,也就是说它的长度为0。例如声明一个字符串String str = "" ;

2、内存分配
String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间;
String str = "";    表示声明一个字符串类型的引用,其值为""空字符串,这个str引用指向的是空字符串的内存空间;

在java中变量和引用变量是存在栈中(stack),而对象(new产生的)都是存放在堆中(heap):

就如下:

String str = new String("abc") ;

ps:=左边的是存放在栈中(stack),=右边是存放在堆中(heap)。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值