Java中char ch变量为何允许在for和while两个循环中分别声明使用?
关于变量重复声明的问题
Java的局部变量存在块作用域规则:只要是被{}包裹的独立代码块(比如for循环、while循环、if分支的代码块),在块内部声明的变量仅在当前块内有效,离开代码块后就会被虚拟机销毁,完全不会影响其他代码块里的同名变量。
你代码里for循环的char ch和while循环的char ch分别属于两个独立的循环代码块,二者是完全互不干扰的全新变量,不存在覆盖的情况。你能在两个循环里操作同一个Stack对象,是因为Stack变量是在方法级的作用域声明的,作用域覆盖整个方法,和循环内部的ch变量没有关联。
关于pop方法的疑问
你的理解完全正确。java.util.Stack的pop()方法设计就是同时完成两个动作:
- 移除栈顶的元素
- 将被移除的元素作为返回值返回给调用方
所以你执行char ch = s.pop()时,会先拿到pop返回的被移除字符,再赋值给ch变量,就算此时栈里已经删掉了这个元素,你已经拿到了它的取值,自然可以正常拼接到结果字符串里。
补充小建议
如果不想重复声明ch变量,你可以直接在方法开头声明一次char ch;,之后在for和while循环里直接给ch赋值即可,此时两个循环操作的就是同一个ch变量。另外字符串拼接如果操作的字符串较长,推荐用StringBuilder代替+拼接,性能会更好。
内容的提问来源于stack exchange,提问作者phez
相关产品推荐
相关产品推荐

