黑马程序员技术交流社区

标题: 这个问题不懂啊,怎么提示错误(已解决) [打印本页]

作者: 戎石锁    时间: 2012-8-4 10:10
标题: 这个问题不懂啊,怎么提示错误(已解决)
本帖最后由 戎石锁问枫 于 2012-8-4 22:01 编辑

class Demo
{
        public static void main(String[] args)
        {
                String str = null;

                if (str.equals("Hello"))
                {

                        System.out.println("str is Hello");
                }
        }
}

提示

11.jpg (6.1 KB, 下载次数: 19)

11.jpg

作者: 林康春    时间: 2012-8-4 10:23
本帖最后由 林康春 于 2012-8-4 10:27 编辑

看错了 不好意思

作者: 陈冲    时间: 2012-8-4 10:23
  1. class Test {
  2.     public static void main(String[] args) {
  3.         // String str = null;//null表示声明了一个空对象,而不是字符串;它在内存中不存在。此时str的引用为空
  4.         String str = "";//""代表声明了一个对象实例,值是长度为0的字符串。此时str的引用不为空

  5.         if (str.equals("Hello")) {

  6.             System.out.println("str is Hello");
  7.         }
  8.     }
  9. }
复制代码
null表示声明了一个空对象,而不是字符串;它在内存中不存在。而对象之间才能用equals进行比较,所以调用equals方法时会提示NullPointerException。
而""代表声明了一个对象实例,其值是长度为0的字符串,这时就可以调用String类中的equals方法与"Hello“进行比较。


作者: 乐凡    时间: 2012-8-4 10:26
空指针异常 string类型的引用不能为空 ,引用指向为空,就没有指定的对象,所以会报错。
作者: 王程    时间: 2012-8-4 10:45
String str=null;表示此时根本就还没有创建对象,就只有一个引用的变量,也就是说str没有任何指向对象,而String方法中的equals方法是重写过的,比较的是两个字符串的内容,而不是地址,而str根本指向对象,就无法比较,出现空指针异常的错误
作者: 胡文凡    时间: 2012-8-4 11:13
null不能执行任何操作除了=和==。否则会报告空指向异常
作者: 尤洋    时间: 2012-8-4 11:45
   str为空 ,str.equals ()  拿不存在的 东西去调用方法 肯定会 报 空指针异常啊
作者: 牛杨    时间: 2012-8-4 11:53
这个异常是空指针异常,在java中如果一个对象的引用的值为null
那么这个引用就不能调用这个对象的任何成员(包括成员方法、成员变量)。
作者: 谭威    时间: 2012-8-4 12:44
实际开发会这样写"hello".equals(str),如果str为空的话也不会抛异常
作者: 官文昌    时间: 2012-8-4 13:13
String str = null,你这是空字符串,它根本没有创建str字符串,没都没有你怎么比较啊??你不能和0字符串混淆了,0字符串代表有字符串,只是里面没有值~~
作者: 韩爽    时间: 2012-8-4 13:21
  1. class Demo
  2. {
  3. public static void main(String[] args)
  4. {
  5. String str = null;

  6. if (str.equals("Hello"))
  7. {

  8. System.out.println("str is Hello");
  9. }
  10. }
复制代码
错误就在于,你不应该让stc=null;首先当给一个变量值为空时,不可以用null,
str="";可以这样。
如果你一定要设定为空,需要用到的就是equals进行。
下面附上==、equals的区别
==是比较的是2个对象的地址,而equals比较的是2个对象的内容。
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
复制代码
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,字符串的比较基本上都是使用equals方法。
如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:
复制代码
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。

http://wenku.baidu.com/view/2d25e10d4a7302768e9939d7.html 这个是百度的文本解释,你可以看看,方便本科学生理解
希望可以帮到你。

作者: 戎石锁    时间: 2012-8-4 21:44
谢谢各位  问题已经解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2