免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3388 | 回复: 25
打印 上一主题 下一主题

怎样防止取到的数据为空? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-04 21:36 |只看该作者 |倒序浏览
如果是字符串类型,可以这样:

char s;
if(s==null) s="";


如果是数据类型呢?
难道也是这样吗?比如,

int a;
if(a==null) a="";
不行呀~~


请指教!

论坛徽章:
0
2 [报告]
发表于 2006-04-04 23:52 |只看该作者
a 不初始化就使用,会抛出异常.

可以这样使用

int a=-1;

if(a==-1) System.out.println("a 没有初始化");

同样道理.你的 char s 没有初始化就使用。不知道能不能通过编译..应该是不可以的.或许你用的编译器比较特殊。

[ 本帖最后由 carset 于 2006-4-4 23:54 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-04-05 07:57 |只看该作者
我想不如让所有变量在声明时候就显式的给它初始化,确保它有初值。这样可能以后会方便些。

不知道有什么好办法?

论坛徽章:
0
4 [报告]
发表于 2006-04-05 08:47 |只看该作者
原帖由 carset 于 2006-4-4 23:52 发表
a 不初始化就使用,会抛出异常.

可以这样使用

int a=-1;

if(a==-1) System.out.println("a 没有初始化");

同样道理.你的 char s 没有初始化就使用。不知道能不能通过编译..应该是不可以的. ...

这样的话,你的-1值岂不是要作废?
除非你能肯定a不会取值为-1~~
:)

论坛徽章:
0
5 [报告]
发表于 2006-04-05 09:32 |只看该作者
原帖由 白色乌鸦 于 2006-4-5 08:47 发表

这样的话,你的-1值岂不是要作废?
除非你能肯定a不会取值为-1~~
:)


对。就是作废了。这个值可以是 int 取值范围内的任意个一数。我想你不可能把所有数字都用到的。
比如你可以设置成 - 2,147,483,648 ,个人感觉这个数一般人很少用到吧。
如果你觉得实在不爽,可以这样来定义


  1.                 int a=-1;
  2.                 boolean b = false;
  3.                
  4.                 if(a==-1&&b==false){
  5.                        
  6.                         System.out.println("a 未定义");
  7.                 }
  8.                 a = -1;b = true;
  9.                 if(a==-1 && b!=false){
  10.                         System.out.println("a 不是原来的 a");
  11.                 }
复制代码

论坛徽章:
0
6 [报告]
发表于 2006-04-05 09:52 |只看该作者
原帖由 狼神萧枫 于 2006-4-4 22:36 发表
如果是字符串类型,可以这样:

char s;
if(s==null) s="";


如果是数据类型呢?
难道也是这样吗?比如,

int a;
if(a==null) a="";
不行呀~~


请指教!


1。s = '';
2。int a; char s;
     if(a ==... if(s ==...
未初始化变量一般compile时出错,int型default赋值为0就可以,char可以设为'',基本类型变量如何防止为空是具体逻辑问题,不应该依赖于某个值。

论坛徽章:
0
7 [报告]
发表于 2006-04-05 13:33 |只看该作者
java和c++还有.net的Exception就是专门用来处理这种情况的,int的默认值是0,它也可能被赋值为0,如果因为程序出错,没有被附上值,就得到了默认值0,那么你就无法判断倒是是因为赋值得0还是出错得0,这个时候就要抛出Exception

public int checkInt() throws xxxxException
{
    int i;
    {
    ....
    if(...)
        i=whatever;
    else
        throw new xxxxException("some message");
    }
}

论坛徽章:
0
8 [报告]
发表于 2006-04-05 15:41 |只看该作者
看书说java中只有静态的类变量缺省为0
原来类里定义的也有缺省值,真复杂




非静态没赋上值会有异常,但我没看到书上有说int默变为0的,不知道怎么测试,给它赋值又赋不上
因为我猜既然为0那么JVM就初始化它了,像C,static int缺省为0,auto int为不确定(就是那块内存原来的值)

[ 本帖最后由 只爱一点点 于 2006-4-5 16:08 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-04-05 15:48 |只看该作者
int float 这些基本类型是没有null 你们都是怎么学习的啊

论坛徽章:
0
10 [报告]
发表于 2006-04-05 15:51 |只看该作者
那要看 int i 在什么位置。

如果在函数。。java 里叫做方法内部。则JVM不会自动给他初始化。就会抛出一个异常。

如果是在类内部。则会默认初始化为 0;


  1. public class TestDefine {
  2.        
  3.         int i;
  4.         public static void main(String[] args){
  5.                
  6.                 new TestDefine();
  7.                
  8.         }
  9.   TestDefine(){  
  10.           
  11.           System.out.println(i);
  12.   }
  13. }

复制代码


输出 0;


  1. public class TestDefine {
  2.        
  3.         //int i;
  4.         public static void main(String[] args){
  5.                
  6.                 new TestDefine();
  7.                
  8.         }
  9.   TestDefine(){  
  10.           int i;
  11.           System.out.println(i);
  12.   }
  13. }

复制代码


则不会通过编译。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP