精华内容
下载资源
问答
  • 以上四种定义形式,你日常开发中最常用的是哪种呢?到底哪一种才是正确的使用姿势呢? 通过观察我们可以发现: (1)前两种和后两种的主要区别是变量的类型不同,前者使用的是boolean,后者使用...

    在日常开发中,我们会经常要在类中定义布尔类型的变量,比如在给外部系统提供一个RPC接口的时候,我们一般会定义一个字段表示本次请求是否成功的。
    一般情况下,我们可以有以下四种方式来定义一个布尔类型的成员变量:
    在这里插入图片描述
    以上四种定义形式,你日常开发中最常用的是哪种呢?到底哪一种才是正确的使用姿势呢?

    通过观察我们可以发现:
    (1)前两种和后两种的主要区别是变量的类型不同,前者使用的是boolean,后者使用的是Boolean。

    (2)另外,第一种和第三种在定义变量的时候,变量命名是success,而另外两种使用isSuccess来命名的。
    首先,我们来分析一下,到底应该是用success来命名,还是使用isSuccess更好一点。
    一、success 还是 isSucces
    在这里插入图片描述
    以上代码的setter/getter是使用Intellij IDEA自动生成的,仔细观察以上代码,你会发现以下规律:

    基本类型自动生成的getter和setter方法,名称都是isXXX()和setXXX()形式的。

    包装类型自动生成的getter和setter方法,名称都是getXXX()和setXXX()形式的。

    既然,我们已经达成一致共识使用基本类型boolean来定义成员变量了,那么我们再来具体看下Model3和Model4中的setter/getter有何区别。

    我们可以发现,虽然Model3和Model4中的成员变量的名称不同,一个是success,另外一个是isSuccess,但是他们自动生成的getter和setter方法名称都是isSuccess和setSuccess。

    Java Bean中关于setter/getter的规范

    关于Java Bean中的getter/setter方法的定义其实是有明确的规定的,根据JavaBeans™ Specification规定,如果是普通的参数,命名为propertyName,需要通过以下方式定义其setter/getter:
    在这里插入图片描述
    但是,布尔类型的变量propertyName则是另外一套命名原则的:
    在这里插入图片描述
    在这里插入图片描述
    通过对照这份JavaBeans规范,我们发现,在Model4中,变量名为isSuccess,如果严格按照规范定义的话,他的getter方法应该叫isIsSuccess。但是很多IDE都会默认生成为isSuccess。

    那这样做会带来什么问题呢?

    在一般情况下,其实是没有影响的。但是有一种特殊情况就会有问题,那就是发生序列化的时候。

    序列化带来的影响

    我们这里拿比较常用的JSON序列化来举例,看看常用的fastJson、jackson和Gson之间有何区别:
    在这里插入图片描述
    以上代码的Model3中,只有一个成员变量即isSuccess,三个方法,分别是IDE帮我们自动生成的isSuccess和setSuccess,另外一个是作者自己增加的一个符合getter命名规范的方法。

    以上代码输出结果:
    在这里插入图片描述
    在fastjson和jackson的结果中,原来类中的isSuccess字段被序列化成success,并且其中还包含hollis值。而Gson中只有isSuccess字段。

    我们可以得出结论:fastjson和jackson在把对象序列化成json字符串的时候,是通过反射遍历出该类中的所有getter方法,得到getHollis和isSuccess,然后根据JavaBeans规则,他会认为这是两个属性hollis和success的值。直接序列化成json:
    在这里插入图片描述
    但是Gson并不是这么做的,他是通过反射遍历该类中的所有属性,并把其值序列化成json:
    在这里插入图片描述
    可以看到,由于不同的序列化工具,在进行序列化的时候使用到的策略是不一样的,所以,对于同一个类的同一个对象的序列化结果可能是不同的。

    前面提到的关于对getHollis的序列化只是为了说明fastjson、jackson和Gson之间的序列化策略的不同,我们暂且把他放到一边,我们把他从Model3中删除后,重新执行下以上代码,得到结果:
    在这里插入图片描述
    现在,不同的序列化框架得到的json内容并不相同,如果对于同一个对象,我使用fastjson进行序列化,再使用Gson反序列化会发生什么?
    在这里插入图片描述
    以上代码,输出结果:
    在这里插入图片描述
    这和我们预期的结果完全相反,原因是因为JSON框架通过扫描所有的getter后发现有一个isSuccess方法,然后根据JavaBeans的规范,解析出变量名为success,把model对象序列化城字符串后内容为{“success”:true}。

    根据{“success”:true}这个json串,Gson框架在通过解析后,通过反射寻找Model类中的success属性,但是Model类中只有isSuccess属性,所以,最终反序列化后的Model类的对象中,isSuccess则会使用默认值false。

    但是,一旦以上代码发生在生产环境,这绝对是一个致命的问题。

    所以,作为开发者,我们应该想办法尽量避免这种问题的发生,对于POJO的设计者来说,只需要做简单的一件事就可以解决这个问题了,那就是把isSuccess改为success。

    这样,该类里面的成员变量时success,getter方法是isSuccess,这是完全符合JavaBeans规范的。无论哪种序列化框架,执行结果都一样。就从源头避免了这个问题。

    引用一下R大关于阿里巴巴Java开发手册中这条规定的评价
    在这里插入图片描述
    所以,在定义POJO中的布尔类型的变量时,不要使用isSuccess这种形式,而要直接使用success!

    二、Boolean还是boolean?
    前面我们介绍完了在success和isSuccess之间如何选择,那么排除错误答案后,备选项还剩下:
    在这里插入图片描述
    那么,到底应该是用Boolean还是boolean来给定一个布尔类型的变量呢?我们知道,boolean是基本数据类型,而Boolean是包装类型。那么,在定义一个成员变量的时候到底是使用包装类型更好还是使用基本数据类型呢?我们来看一段简单的代码:
    在这里插入图片描述
    以上代码输出结果为:
    在这里插入图片描述
    可以看到,当我们没有设置Model对象的字段的值的时候,Boolean类型的变量会设置默认值为null,而boolean类型的变量会设置默认值为false。

    即对象的默认值是null,boolean基本数据类型的默认值是false。

    在阿里巴巴Java开发手册中,对于POJO中如何选择变量的类型也有着一些规定:

    在这里插入图片描述
    这里建议我们使用包装类型,原因是什么呢?

    举一个扣费的例子,我们做一个扣费系统,扣费时需要从外部的定价系统中读取一个费率的值,我们预期该接口的返回值中会包含一个浮点型的费率字段。当我们取到这个值得时候就使用公式:金额*费率=费用 进行计算,计算结果进行划扣。

    如果由于计费系统异常,他可能会返回个默认值,如果这个字段是Double类型的话,该默认值为null,如果该字段是double类型的话,该默认值为0.0。

    如果扣费系统对于该费率返回值没做特殊处理的话,拿到null值进行计算会直接报错,阻断程序。拿到0.0可能就直接进行计算,得出接口为0后进行扣费了。这种异常情况就无法被感知。

    这种使用包装类型定义变量的方式,通过异常来阻断程序,进而可以被识别到这种线上问题。如果使用基本数据类型的话,系统可能不会报错,进而认为无异常。

    以上,就是建议在POJO和RPC的返回值中使用包装类型的原因。

    展开全文
  • 无论哪种语言,闭包的概念都被以下几个特征共同约束:匿名函数(非独有,函数指针也可以);可以调用闭包,并显式传递参数(非独有,函数指针也可以);以变量形式存在,可以传来传去(非独有,函数指针也可以);可以在...

    闭包是什么

    闭包(Closure)的概念由来已久。无论哪种语言,闭包的概念都被以下几个特征共同约束:

    • 匿名函数(非独有,函数指针也可以);

    • 可以调用闭包,并显式传递参数(非独有,函数指针也可以);

    • 以变量形式存在,可以传来传去(非独有,函数指针也可以);

    • 可以在闭包内直接捕获并使用定义所处作用域的值(独有)

    神奇的是最后一点,理解起来也比较别扭的,习惯就好了。

    为了说明上述特征,可以看一个Rust例子。

    fn display<T>(age: u32, print_info: T)
    where T: Fn(u32)
    {
    print_info(age);
    }

    fn main() {
    let name = String::from("Ethan");

    let print_info_closure = |age|{
    println!("name is {}", name);
    println!("age is {}", age);
    };

    let age = 18;
    display(age, print_info_closure);
    }

    运行代码:

    name is Ethan

    age is 18

    首先,闭包作为匿名函数存在了print_info_closure栈变量中,然后传递给了函数display作为参数,在display内部调用了闭包,并传递了参数age。最后神奇的事情出现了:在函数display中调用的闭包居然打印出了函数main作用域中的变量name

    ca4e0478958bb4bb96fa7c451d1b8c29.png

    wormhole

    闭包的精髓,就在于它同时涉及两个作用域,就仿佛打开了一个"虫洞",让不同作用域的变量穿梭其中。

    let x_closure = ||{};

    单独一行代码,就藏着这个奥妙:

    • 赋值=的左侧,是存储闭包的变量,它处在一个作用域中,也就是我们说的闭包定义处的环境上下文;

    • 赋值=的右侧,那对花括号{}里,也是一个作用域,它在闭包被调用处动态产生;

    无论左侧右侧,都定义了闭包的属性,天然的联通了两个作用域。

    对于闭包,Rust如此,其他语言也大抵如此。不过,Rust不是还有所有权、生命周期这一档子事儿么,所以还可以深入分析下。

    2. Rust闭包捕获上下文的方式

    如本篇题目,Rust闭包如何捕获上下文?

    换个问法,main作用域中的变量name是以何种方式进入闭包的作用域的(第1节例子)?转移or借用?

    It Depends,视情况而定。

    Rust在std中定义了3种trait:

    • FnOnce:闭包内对外部变量存在转移操作,导致外部变量不可用(所以只能call一次)

    • FnMut:闭包内对外部变量直接使用,并进行修改

    • Fn:闭包内对外部变量直接使用,不进行修改

    后者能办到的,前者一定能办到。反之则不然。所以,编译器对闭包签名进行推理时:

    • 实现FnMut的,同时也实现了FnOnce;

    • 实现Fn的,同时也实现了FnMut和FnOnce。

    第1节的例子,将display的泛型参数从Fn改成FnMut,也可以无警告通过。

    fn display<T>(age: u32, mut print_info: T)
    where T: FnMut(u32)
    {
    print_info(age);
    }

    对环境变量进行捕获的闭包,需要额外的空间支持才能将环境变量进行存储。

    3. 作为参数的闭包签名

    上面代码display函数定义,要接受一个闭包作为参数,揭示了如何显式的描述闭包的签名:在泛型参数上添加trait约束,比如T: FnMut(u32),其中(u32)显式的表示了输入参数的类型。尽管是泛型参数约束,但是函数签名(除了没有函数名)描述还是非常精确的

    顺便说一句,Rust的泛型真的是干了不少事情,除了泛型该干的,还能添加trait约束,还能描述生命周期。

    描述签名是一回事,但是谁来定义闭包的签名呢?闭包定义处,我们没有看到任何的类型约束,直接就可以调用。

    答案是:闭包的签名,编译器全部一手包办了,它会将首次调用闭包传入参数和返回值的类型,绑定到闭包的签名。这就意味着,一旦闭包被调用过一次后,再次调用闭包时传入的参数类型,就必须是和第一次相同。

    传入参数和返回值类型绑定好了,但你心中难免还会有一丝忧愁:描述生命周期的泛型参数肿么办?

    Rust编译器也搞得定。

    fn main(){
    let lifttime_closure = |a, b|{
    println!("{}", a);
    println!("{}", b);
    b
    };
    let a = String::from("abc");
    let c;
    {
    let b = String::from("xyz");
    c = lifttime_closure(&a, &b);
    }
    println!("{}", c);
    }

    以上代码无法通过编译,成功检测出了悬垂引用:

    error[E0597]: b does not live long enough

    显然,对于闭包,编译期可以对引用的生命周期进行检查,以保证引用始终有效。

    这个例子,与其解释闭包与函数的区别,不如解释匿名函数与具名函数的区别:

    • 具名函数是签名在先的,对于编译器来说,调用方和函数内部实现,只要分别遵守签名的约定即可。

    • 匿名函数的签名则是被推理出来的,编译器要看全看透调用方的实际输入,以及函数内部的实际返回,检查自然也就顺带做掉了。

    4. 函数返回闭包

    第1节的例子,我们将一个闭包作为函数参数传入,那么根据闭包的特性,它应该能够作为函数的返回值。答案是肯定的。

    基于前面介绍的Fn trait,我们定义一个返回闭包的函数,代码如下:

    fn closure_return() -> Fn() -> (){
    ||{}
    }

    可是,编译失败了:

    error[E0746]: return type cannot have an unboxed trait object

    doesn't have a size known at compile-time

    失败信息显示,编译器无法确定函数返回值的大小。一个闭包有多大呢?并不重要。

    开门见山,通用的解决方法是:为了能够返回闭包,可以使用一次装箱,从而将栈内存变量装箱存入堆内存,这样无论闭包有多大,函数返回值都是一个确定大小的指针。下面的代码里,使用Box::new即可完成装箱。

    fn closure_inside() -> Box<dyn FnMut() -> ()>
    {
    let mut age = 1;
    let mut name = String::from("Ethan");

    let age_closure = move || {
    name.push_str(" Yuan");
    age += 1;
    println!("name is {}", name);
    println!("age is {}", age);
    };

    Box::new(age_closure)
    }

    fn main(){
    let mut age_closure = closure_inside();
    age_closure();
    age_closure();
    }

    运行结果如下:

    name is Ethan Yuan age is 2 name is Ethan Yuan Yuan age is 3

    上面的代码,除了让函数成功返回闭包之外,还有一个目的,我们想让闭包捕获函数内部环境中的值,但这次有些不同:

    • 第1节代码示例,我们把外层的环境上下文,通过将闭包传入内层函数,这个不难理解,因为外层变量的生命周期更长,内层函数访问时,外层变量还活着;

    • 而本节代码所做的,是通过闭包将内层函数的环境变量传出来给外层环境;

    内层函数调用完成后就会销毁内层环境变量,那如何做到呢?幸好,Rust有所有权转移。只要能促成内层函数的环境变量向闭包进行所有权的转移,这个操作顺理成章。

    正因为Rust具有所有权转移的概念,返回闭包(同时捕获环境变量)的机理,Rust的要比任何具有垃圾回收语言(JavaScript、Java、C#)的解释都更简单明了。后者总会给人一丝不安:内部函数调用都结束了,居然局部变量还活着。

    代码中的所有权转移,这里使用了关键字move,它可以在构建闭包时,强制将要捕获变量的所有权转移至闭包内部的特别存储区。需要注意的是,使用move,并不影响闭包的trait,本例中可以看到闭包是FnMut,而不是FnOnce

    展开全文
  • //循环变量 void BacktoHome(); void Introduction(); void SpecialOne(); void SpecialMost(); void SpecialLeast(); void PrintAll(); void Away(); void Initial(void) { cout; cout八 皇 后 ...
  • Java零散小总结

    2018-12-19 09:34:00
    一般情况下,我们可以以下四种方式来定义一个布尔类型的成员变量: booleansuccessbooleanisSuccessBooleansuccessBooleanisSuccess 以上四种定义形式,你日常开发中最常用的是哪种呢?到底哪一种才是正确的...

    1. 在类中定义布尔类型的变量

    一般情况下,我们可以有以下四种方式来定义一个布尔类型的成员变量:

    boolean success
    boolean isSuccess
    Boolean success
    Boolean isSuccess

     

    以上四种定义形式,你日常开发中最常用的是哪种呢?到底哪一种才是正确的使用姿势呢?

    看看阿里巴巴Java开发手册中这条规定的评价

    8. 【强制】POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。反例:定义为基本数据类型 boolean isSuccess;的属性,它的方法也是 isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异常。

    所以,在定义POJO中的布尔类型的变量时,不要使用isSuccess这种形式,而要直接使用success!

     

    那么,到底应该是用Boolean还是boolean来给定一个布尔类型的变量呢?

    我们知道,boolean是基本数据类型,而Boolean是包装类型。

    当我们没有设置Model对象的字段的值的时候,Boolean类型的变量会设置默认值为null,而boolean类型的变量会设置默认值为false

    8. 关于基本数据类型与包装数据类型的使用标准如下:

      1) 【强制】所有的 POJO 类属性必须使用包装数据类型。

      2) 【强制】RPC 方法的返回值和参数必须使用包装数据类型。

      3) 【推荐】所有的局部变量使用基本数据类型。

    说明:POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何 NPE 问题,或者入库检查,都由使用者来保证。

    正例:数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险。

    反例:比如显示成交总额涨跌情况,即正负 x%,x 为基本数据类型,调用的 RPC 服务,调用 不成功时,返回的是默认值,页面显示为 0%,这是不合理的,应该显示成中划线。所以包装 数据类型的 null 值,能够表示额外的信息,如:远程调用失败,异常退出。

    以上,就是建议在POJO和RPC的返回值中使用包装类型的原因。

     

    当我们在设计一个接口的时候,对于接口的返回值的定义,尽量避免使用Boolean类型来定义。大多数情况下,别人使用我们的接口返回值时可能用if(response.isSuccess){}else{}的方式,如果我们由于忽略没有设置success字段的值,就可能导致NPE,这明显是我们不希望看到的。个人觉得统一成数字0和1最好。

    当然,编程中并没有绝对。两种方式是两种思维方式,多提供一种思路,在日常开发中自行选择。

     

    转载于:https://www.cnblogs.com/move22/p/10141325.html

    展开全文
  • vba中数据类型

    2018-03-14 10:36:00
    VBA共有12数据类型,具体见下表,此外用户还可以根据以下类型用Type自定义数据类型。 1)VBA允许使用未定义的变量,默认是变体变量。2)在模块通用说明部份,加入 Option Explicit 语句可以强迫用户进行变量...
    VBA共有12种数据类型,具体见下表,此外用户还可以根据以下类型用Type自定义数据类型。

    1)VBA允许使用未定义的变量,默认是变体变量
    2)在模块通用说明部份,加入 Option Explicit 语句可以强迫用户进行变量定义。
    3)变量定义语句及变量作用域:

    一般变量作用域的原则是:在哪部份定义就在哪部份起作用,模块中定义则在该模块那作用。

    转载于:https://www.cnblogs.com/gongyanxu/p/8565787.html

    展开全文
  • 1、按照作用域范围,变量可以分为? 按照作用域范围,变量可以分为局部变量和全局变量。 局部变量 局部变量也称为内部变量,局部变量是在函数内作定义和说明的,其作用域仅限于函数内,离开该函数后再使用...
  • 2.实参可以是常量、变量、表达式、函数等, 无论实参是何类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。 3.实参和形参在数量...
  • js总结2

    2011-09-02 15:39:58
    164. 定义常量的关键字:const,定义变量的关键字:var165.将数字转化为人民币大写形式 166.xml数据岛绑定表格167.以下组合可以正确显示汉字168.XML操作169.动态修改CSS的另一方式170. isNaN(变量):测试是否为数值型....
  • 控件也是窗口,所以控件也有WM_PAINT消息,通过消息映射我们完全可以定义控件的界面。如图5所示: 图5 利用WM_ PAINT消息美化界面 实现代码也很简单: void CLazyStatic::OnPaint() { CPaintDC dc(this); // ...
  • 第二用简单的符号常量代替较长的常量可防止书写时出错 在程序中提倡使用符号常量符号常量有以下几个优点 第三修改符号常量定义时的值即可完成对源代码中所有该 符号常量值的修改 第二节 常量 第一可以清晰地表示常量...
  • c#题库.doc

    2013-09-24 19:01:47
    对于初学来哦说是个不错的练习题 1. C#语言中,值类型包括:基本值类型、...9. 在C#中,表示一个字符串的变量应使用以下哪条语句定义( )。  A. CString str; B. string str;  C. Dim str as string D. char * str;
  • C语言编程要点

    2017-09-18 00:10:37
    2.15. 可以在头文件中说明或定义变量吗? 27 2.16. 说明一个变量和定义一个变量有什么区别? 27 2.17. 可以在头文件中说明static变量吗? 28 2.18. 用const说明常量有什么好处? 28 第3章 排序与查找 28 排序 28 查找 29...
  • EL表达式的详细使用

    2011-04-01 11:12:51
    有效表达式可以包含文字、操作符、变量(对象引用)和函数调用。我们将分别了解这些有效表达式中的每一: 1、文字 JSP 表达式语言定义可在表达式中使用的以下文字: 文字 文字的值 Boolean true 和 false ...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题66 如何在switch语句内部定义变量 67 5.4 递归 68 面试题67 什么是递归 68 面试题68 汉诺塔问题 69 第6章 输入输出(教学视频:15分钟) 73 6.1 输入流与输出流 73 面试题69 什么是标准输入输出流 73 面试题70...
  • php高级开发教程说明

    2008-11-27 11:39:22
    哪种方式更好?每一个程序 员会说他(她)的方法最好,但只有那些熟悉两种概念—o o p和过程化编程—的人能够作出 判断。 前面提到的每一种语言代表一种解决问题的特定方法,这些问题多属于具有特殊要求的某 一特殊...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    17. 只能存储一个值的变量哪种变量?( B ) A. 游标 B. 标量变量 C. 游标变量 D. 记录变量 18. 声明%TPYE类型的变量时,服务器将会做什么操作?( A ) A. 为该变量检索数据库列的数据类型 B.复制一个变量 C.检索...
  • EL表达式 (详解)

    2009-12-24 14:32:53
    区别是[ ]可以显示非词类的变量 2、EL隐含对象 1)与范围有关的隐含对象 与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和 applicationScope; 它们基本上就和JSP的...
  • 15.设int 型变量 a、b,float 型变量 x、y,char 型变量 ch 均已正确定义并赋值, 正确的switch语句是( )。 A) switch (x + y) B) switch ( ch + 1 ) { ...... } { ...... } C) switch ch D) switch ( a + b ); { ....
  • 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、short、...
  • java 面试题 总结

    2009-09-16 08:45:34
    接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象...
  • 接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象...
  • A) 定义接口的关键字为interface,接口中可以定义变量,但是必须同时为该变量赋值,接口中的方法默认全部为public类型。 B) 实现接口的关键字是implements,其后可以跟多个接口的名字,即实现多继承。一个类实现了...
  • 5.若以下变量均已正确定义并赋值,下面符合Java语言语法的语句是( )。 A) b = a!=7 ; B) a = 7 + b + c=9; C) i=12.3* % 4; D) a = a + 7 = c + b; 6.下列程序段执行后t5的结果是( )。 int t1 = 9, t2 = 11, t3=8; ...
  • 1.1 我该如何决定使用哪种整数类型? 1  1.2 为什么不精确定义标准类型的大小? 2 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、...
  • flash shiti

    2014-03-14 10:32:41
    42.图形文件中,格式的矢量图能被Flash直接引用? A. *.ai B. *.eps C. *.cdr D. *.wmf 43.下图中几项可以打开平滑与整平工具? A. 从附属选项中挑选 和 钮 B. 从附属选项中挑选 和 钮 C. 选取...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.1 我该如何决定使用哪种整数类型? 1  1.2 为什么不精确定义标准类型的大小? 2 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、...
  • const定义的常量是有类型的,所以在使用它们时编译器可以查错;而且,这些变量在调试时仍然是可见的。 2-5 请写出C++语句声明一个常量PI,值为3.1416;再声明一个浮点型变量a,把PI的值赋给a。 解: const float PI...
  • java面试宝典

    2013-02-28 16:04:01
    108、以下哪一个不是赋值符号? 25 109、以下哪个不是Collection的子接口? 25 110、.BufferedReader的父类是以下哪个? 25 112、div与span区别? 25 113、html的框架是什么? 25 114、alert怎样换行? 25 115、什么...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

以下哪种可以定义变量