为了账号安全,请及时绑定邮箱和手机立即绑定

题目的答案错的吧,文件名明明有效

如果判定时使用 

if ( index!=-1 && index!=0 && prefix==".java" ) {

System.out.println("Java文件名正确");

} else {

System.out.println("Java文件名无效");

}

这样就不对,因为前面说过两个".java"在内存中是两个不同的单元只是内容相同,所以会跳到else上,文件名无效


但真正正确的应该用

if ( index!=-1 && index!=0 && prefix.equals(".java") ) {

System.out.println("Java文件名正确");

} else {

System.out.println("Java文件名无效");

}

这样跑出来应该文件名是对的,有效的


正在回答

3 回答

https://img1.sycdn.imooc.com//5c80e93a0001b19803860486.jpg

https://img1.sycdn.imooc.com//5c80e93b0001d67807330496.jpg

题目给多了个“a”,所以跟答案相反。

0 回复 有任何疑惑可以回复我~

题目是故意的,就是为了让我们分清楚比较栈内存和堆内存的区别


0 回复 有任何疑惑可以回复我~

1:==是比较栈内存里面的值,对于基本数据类型,栈区的值就是数据的值

2:equals()是进行堆区里面内容的比较,对于引用数据类型,栈区的值是对象的地址

3:基本数据类型比较用==,引用数据类型比较用equals()方法

4:".java"是字符串String引用数据类型


0 回复 有任何疑惑可以回复我~
#1

慕沐1990658 提问者

equals()才是数据的值吧,我觉得==才是地址吧??
2018-08-19 回复 有任何疑惑可以回复我~
#2

暖_28 回复 慕沐1990658 提问者

你说得对,但是楼上说的也不错,它是区分了一下基本类型和引用类型.如果不是new 的话指定一个属性值得话,会现在内存中查找有没有这个值。比如说int a=1;int b=1;这样用==他们也是true.如果没有才会创建一个新的地址.如果new 了的话,就是无论有没有直接创建新的地址存值.
2018-08-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

题目的答案错的吧,文件名明明有效

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信