c# 中 bool 与 Boolean 什么有什么区别

问题描述

c#中bool与Boolean什么有什么区别

解决方案

解决方案二:
1.bool是基本值类型,Boolean是对象.2.bool是Boolean的别名.bool是C#中的,Boolean是.netFramework中的。
解决方案三:
使用起来的话Boolean相对于bool要快一点。编译器里面会把bool转换成Boolean.
解决方案四:
引用1楼js1722的回复:

1.bool是基本值类型,Boolean是对象.2.bool是Boolean的别名.bool是C#中的,Boolean是.netFramework中的。

1.错,bool和Boolean是同样的,正如2所说,bool是Boolean的别名.2.对。
解决方案五:
引用2楼js1722的回复:

使用起来的话Boolean相对于bool要快一点。编译器里面会把bool转换成Boolean.

没有根据。bool和Boolean是一样的,不存在快慢问题。
解决方案六:
我也明白了!
解决方案七:
[Quote=引用3楼wuyi8808的回复:]引用1楼js1722的回复:1.bool是基本值类型,Boolean是对象.2.bool是Boolean的别名.bool是C#中的,Boolean是.netFramework中的。
解决方案八:
string和 String也是一个道理吧。
解决方案九:
bool就像你的乳名,你爹妈以及你们内部所属成员都认识,Boolean就像你的学名。大家都认识。不过不管按照学名还是乳名称呼你,最终的目的是一样的,还是你这个人。引用楼主liwhsh的帖子:

c#中bool与Boolean什么有什么区别

解决方案十:
引用3楼wuyi8808的回复:

引用1楼js1722的回复:1.bool是基本值类型,Boolean是对象.2.bool是Boolean的别名.bool是C#中的,Boolean是.netFramework中的。1.错,bool和Boolean是同样的,正如2所说,bool是Boolean的别名.2.对。

学习了up
解决方案十一:
up空军,其实就是string与String,int与Int32等等的区别,其实就是别名而已,是一样的
解决方案十二:
确切地说,是:C#中bool与System.Boolean没有区别,bool是System.Boolean的别名。细究起来,C#中bool与Boolean还是有一点区别的,那就是://usingSystem;//假设usingSystem;被注释掉了classProgram{staticvoidMain(){boolisOK=false;//没问题BooleanisNotOK=true;//errorCS0246:找不到类型或命名空间名称“Boolean”(是否缺少using指令或程序集引用?)}}

解决方案十三:
bool和Boolean别名关系同string与Stringmsdn上的:bool关键字是System.Boolean的别名。它用于声明变量来存储布尔值true和false
解决方案十四:
引用11楼wuyi8808的回复:

确切地说,是:C#中bool与System.Boolean没有区别,bool是System.Boolean的别名。细究起来,C#中bool与Boolean还是有一点区别的,那就是:C#code//usingSystem;//假设usingSystem;被注释掉了classProgram{staticvoidMain(){boolisOK=false;//没问题BooleanisNotOK=true;//errorCS0246:找不到类型或命名空间名称“Boolean”(是否缺少u…

如果你的示例正确,应该Boolean是bool的别名bool是系统内置的,Boolean是在System空间定义的(bool别名)
解决方案十五:
引用11楼wuyi8808的回复:

确切地说,是:C#中bool与System.Boolean没有区别,bool是System.Boolean的别名。细究起来,C#中bool与Boolean还是有一点区别的,那就是:C#code//usingSystem;//假设usingSystem;被注释掉了classProgram{staticvoidMain(){boolisOK=false;//没问题BooleanisNotOK=true;//errorCS0246:找不到类型或命名空间名称“Boolean”(是否缺少using指令或程序集引用?)}}

哈哈,空军也用中式英语,isNotOK
解决方案:
MSDN:bool关键字是System.Boolean的别名。
解决方案:
一样的,就和一个人有小名一样
解决方案:
引用13楼lovexxj的回复:

如果你的示例正确,应该Boolean是bool的别名bool是系统内置的,Boolean是在System空间定义的(bool别名)

System.Boolean是.NET类库中的一个类(确切地说是结构,struct),是.NET各语言通用的,不限于C#,在VB.NET、C++.NET、Dephi.NET、...中都能使用。而bool是C#语言为.NET类库中通用类型System.Boolean起的别名,为了方便使用,少敲几个字符,或者为了和Java看起来更像些。
解决方案:
在线MSDN:C#语言参考内置类型表(C#参考)下表显示了内置C#类型的关键字,这些类型是System命名空间中的预定义类型的别名。C#类型.NETFramework类型boolSystem.BooleanbyteSystem.BytesbyteSystem.SBytecharSystem.ChardecimalSystem.DecimaldoubleSystem.DoublefloatSystem.SingleintSystem.Int32uintSystem.UInt32longSystem.Int64ulongSystem.UInt64objectSystem.ObjectshortSystem.Int16ushortSystem.UInt16stringSystem.String

备注除了object和string外,表中的所有类型均称为简单类型。C#类型的关键字及其别名可以互换。例如,可使用下列两种声明中的一种来声明一个整数变量:intx=123;System.Int32x=123;

解决方案:
bool,string,int这些叫做值类型(valuetype)Boolean,String,Int32这些叫做引用类型(ReferenceType)那么,很自然地,你们的下一个问题就是值类型和引用类型的区别在哪.....前人写了一篇文章,大家可以观摩一下http://www.albahari.com/valuevsreftypes.aspx粗略地说,值类型是存在内存的stack中(即堆栈),而引用类型存在heap(即堆)那么。。。你可以更粗略地认为放在stack中会快一些,因为heap是程序运行时动态生成的,实际上class都是在run-time的时候生成放在heap的。。这也是一个早期的“罪状”说java很慢,因为所有东西在java里都是对象时至今日。。。随着编译器的优化、硬件的升级。。其实无所谓快慢了。。。除非是在很特殊的环境,例如移动设备上的编程。。。基本上。。这种效率的差别可以忽略。。。
解决方案:
C#中没区别
解决方案:
一样publicstructBoolean:IComparable,IConvertible,IComparable<bool>,IEquatable<bool>
解决方案:
补充一下。。。所有的值类型在c#里都不超过16bytes,除了string实际上,string就是String,严格来说string并不是值类型。。。因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntaxsugar),所以msdn上会说string是String的别名。。。所以会造成很多人误会。。以为其他的值类型都是别名
解决方案:

解决方案:
引用4楼wuyi8808的回复:

引用2楼js1722的回复:使用起来的话Boolean相对于bool要快一点。编译器里面会把bool转换成Boolean.没有根据。bool和Boolean是一样的,不存在快慢问题。

虽然你是星星,我还是要反抗一下呵呵~~这个也是我引用的其他牛人的说法,不知道对不对,给你PK一下.虽然是string与String但是原理相同.string是c#中的类,String是.netFramework的类(在c#IDE中不会显示蓝色)c#string映射为.netFramework的String如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作
解决方案:
据我所知。。不存在c#中的类和.netFramework的类这种说法。。。如果说用了string,编译器会将它换成String,从这个角度来说,是会在编译时快一些。。。但Boolean,Int32和其他引用类型就不是这回事了。。由于string的特殊身份(实际上值类型里没有string,为了使用方便才把String通过syntaxsugar的手段放进去)。。值类型是放在stack中,而引用类型是放在heap中。。heap里的东西是动态生成,所以会比放在stack中慢。。引用24楼js1722的回复:

引用4楼wuyi8808的回复:引用2楼js1722的回复:使用起来的话Boolean相对于bool要快一点。编译器里面会把bool转换成Boolean.没有根据。bool和Boolean是一样的,不存在快慢问题。虽然你是星星,我还是要反抗一下呵呵~~这个也是我引用的其他牛人的说法,不知道对不对,给你PK一下.虽然是string与String但是原理相同.string是c#中的类,String是.netFramework的类(在c#IDE中不会显示蓝色)…

解决方案:
引用19楼superplayboy的回复:

bool,string,int这些叫做值类型(valuetype)Boolean,String,Int32这些叫做引用类型(ReferenceType)

无稽之谈。应该是:bool,System.Boolean,int,System.Int32这些叫做值类型(valuetype)string,System.String叫做引用类型(ReferenceType)bool就是.NET类型System.Boolean在C#中的别名。
解决方案:
引用22楼superplayboy的回复:

补充一下。。。所有的值类型在c#里都不超过16bytes,除了string实际上,string就是String,严格来说string并不是值类型。。。因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntaxsugar),所以msdn上会说string是String的别名。。。所以会造成很多人误会。。以为其他的值类型都是别名

更是无稽之谈。
解决方案:
引用25楼superplayboy的回复:

据我所知。。不存在c#中的类和.netFramework的类这种说法。。。

确实不存在c#中的类和.netFramework的类这种说法,只能说System.String是.NET中的类,string是其在C#中的别名。
解决方案:
引用26楼wuyi8808的回复:

应该是:bool,System.Boolean,int,System.Int32这些叫做值类型(valuetype)string,System.String叫做引用类型(ReferenceType)bool就是.NET类型System.Boolean在C#中的别名。

引用27楼wuyi8808的回复:

更是无稽之谈。

ref1:http://msdn.microsoft.com/en-us/library/s1ax56ch.aspxvaluetypes包括2大类Structs和Enumerations其中Structs包括1)Numerictypes2)Integraltypes整型,包括:sbyte,byte,char,short,ushort,int,uint,long,ulong3)Floating-PointTypes浮点数,包括:float,double4)decimal5)bool6)Userdefinedstructs.自定义structref2:http://msdn.microsoft.com/en-us/library/490f96s2.aspxreferencetype包括1)class2)interface3)delegate也就是说。。。除了string/String,其他的都是valuetype既然string是一个referencetype,那么它或者是class,或者是interface,或者是delegate。。。排除法,string不可能是inteface和delegate,所以string是一个类。既然是类,为什么使用string可以像其它valuetype一样?在使用前不需要new?暂时我在MSDN里没有找到说明,但是google中不难找到一种普遍的说法,因为string太常使用,为了便利,所以特意将它在valuetype中做一个别名。。实际上不是不需要new,而是编译器帮你new了,让你感觉和其他的valuetype一样。。这实际上就是语法糖。。实际上除了string/String,object/Object也是一样BTW,MSDN中的确分了C#“类”和.NET“类”,不过这个“类”是type(类型)的意思,而不是class,我初时的理解以为是class,所以我会说不存在这种说法。。。看这里:http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx其中有一句比较有意思:Allofthetypesinthetable,exceptobjectandstring,arereferredtoassimpletypes.这句话提到了“simpletype”的说法,在有些教材里,会把valuetype叫做simpletype,MSDN在这里不知道是有意还是无意。。“意外”地列出了valuetype和referencetype的区别。。。最后,对某些人或有意或无意动不动就下无稽定论的态度表示遗憾。。不见得技术分高的就可以横着走路
解决方案:
方言与普通话的区别
解决方案:
typeof(string).IsClass是truetypeof(int).IsClass是false
解决方案:
领教了,以前都没怎么注意
解决方案:
引用29楼superplayboy的回复:

引用26楼wuyi8808的回复:应该是:bool,System.Boolean,int,System.Int32这些叫做值类型(valuetype)string,System.String叫做引用类型(ReferenceType)bool就是.NET类型System.Boolean在C#中的别名。引用27楼wuyi8808的回复:因为值类型在编程上的便利,因此微软特别地将String放进值类型里,更是无稽之谈。最后,对某些人或有意或无意动不动就下无稽定论的态度表示遗憾。。不见得技术分高的就可以横着走路

让大家评评看,我26楼和27楼那句话说错了?
解决方案:
System.Boolean是.NET类库中的一个类(确切地说是结构,struct),是.NET各语言通用的,不限于C#,在VB.NET、C++.NET、Dephi.NET、...中都能使用bool是C#语言为Boolean起的别名.
解决方案:
引用19楼superplayboy的回复:

bool,string,int这些叫做值类型(valuetype)Boolean,String,Int32这些叫做引用类型(ReferenceType)

请问,第一行,string叫做值类型,这正确吗?第二行,Boolean,Int32这些叫做引用类型,这正确吗?难道不是无稽之谈吗?
解决方案:
很强大继续看下文
解决方案:
引用22楼superplayboy的回复:

因为值类型在编程上的便利,因此微软特别地将String放进值类型里,string实际上是一个语法糖(syntaxsugar),

难道不更是无稽之谈?
解决方案:
没有区别TheboolkeywordisanaliasofSystem.Boolean.ItisusedtodeclarevariablestostoretheBooleanvalues,trueandfalse
解决方案:
无论是string,还是System.String,都是引用类型。不存在19楼所说,string叫做值类型的情况。对C#来说,string和System.String是一样的,string是System.String在C#中的别名。无论是bool,还是System.Boolean,都是值类型。不存在19楼所说,Boolean叫做引用类型的情况。对C#来说,bool和System.Boolean是一样的,bool是System.Boolean在C#中的别名。
解决方案:
一个东西。
解决方案:
看来得进来一位MVP看看了..
解决方案:
大家评论这些低层点东西的时候无非都是看的书面上的,要有事例证明.编写过.netFramework的除外.任何事情都不能说的太死,留有余地,一起讨论嘛.MVP说的还是比较有信服力.~.~
解决方案:
支持下空军我觉得就编译成中间语言的时候把bool转成System.BooleanSystem.Boolean也是值类型typeof(System.Boolean).BaseType.FullName输出System.ValueTypesizeof(System.Boolean)输出是1觉得上面可以说明System.Boolean是值类型
解决方案:
在MSDN里,string被明确归入到了引用类型
解决方案:
引用4楼wuyi8808的回复:

引用2楼js1722的回复:使用起来的话Boolean相对于bool要快一点。编译器里面会把bool转换成Boolean.没有根据。bool和Boolean是一样的,不存在快慢问题。

不是我钻牛角尖,空军大哥在说这个没根据的时候,估计他自己对这个编译过程也不清楚.(我对这个编译也不清楚,以前在其他牛人博客里看过这个说法,也就一直这么认为,有人发帖子我就说出来了,呵呵~)如果在编译成中间语言时候把bool转换成Boolean的话,从这个角度考虑,那效率肯定会高一点.~.~
解决方案:
引用45楼js1722的回复:

不是我钻牛角尖,空军大哥在说这个没根据的时候,估计他自己对这个编译过程也不清楚.(我对这个编译也不清楚,以前在其他牛人博客里看过这个说法,也就一直这么认为,有人发帖子我就说出来了,呵呵~)如果在编译成中间语言时…

编译生成的IL代码是一样,没有区别的,所以说不存在快慢问题。不信你自己用ILDASM看一下就知道了。
解决方案:
引用46楼wuyi8808的回复:

引用45楼js1722的回复:不是我钻牛角尖,空军大哥在说这个没根据的时候,估计他自己对这个编译过程也不清楚.(我对这个编译也不清楚,以前在其他牛人博客里看过这个说法,也就一直这么认为,有人发帖子我就说出来了,呵呵~)如果在编译成中间语言时…编译生成的IL代码是一样,没有区别的,所以说不存在快慢问题。不信你自己用ILDASM看一下就知道了。

就是,如果你会用ildasm看IL代码的话,根本就不会相信什么所谓的使用起来的话Boolean相对于bool要快一点。编译器里面会把bool转换成Boolean.这种话,由头到尾空军都没有说错,19楼与22楼之说的确是无稽之谈
解决方案:
假设有如下程序:classProgram{voidMethod1(){boola;}voidMethod2(){System.Booleana;}staticvoidMain(){}}

编译一下,有两个警告,不用理会,Program.cs(5,10):warningCS0168:声明了变量“a”,但从未使用过Program.cs(10,20):warningCS0168:声明了变量“a”,但从未使用过

然后用ILDASM看一上生成的Program.exe,我们会看到:.methodprivatehidebysiginstancevoidMethod1()cilmanaged{//代码大小2(0x2).maxstack0.localsinit(boolV_0)IL_0000:nopIL_0001:ret}//endofmethodProgram::Method1

.methodprivatehidebysiginstancevoidMethod2()cilmanaged{//代码大小2(0x2).maxstack0.localsinit(boolV_0)IL_0000:nopIL_0001:ret}//endofmethodProgram::Method2

充分证明bool和System.Boolean是一样的,无区别的,不存在快慢问题。
解决方案:
mark一下回家再看!我也不太清楚只知道bool是Boolean的引用Boolean是对像仅此而已遇到各位高手正好学习一下!
解决方案:
顶,所有星星都是我的老大,都要膜拜!

时间: 2024-08-26 08:12:51

c# 中 bool 与 Boolean 什么有什么区别的相关文章

MySQL中BOOL/BOOLEAN 与 TINYINT 区别 - 测试笔记

(一) 数据类型测试 (1). 布尔类型BOOL/BOOLEAN 与 微整型TINYINT a). 创建测试表结构 root@localhost : test 05:12:49> CREATE TABLE boolean_test(ID INT NOT NULL AUTO_INCREMENT, ->                           Online_Flag BOOL, ->                           Lock_Flag BOOLEAN, -&g

在link中bool和Boolen有什么区别?哪一个效率高?

问题描述 在link中bool和Boolen有什么区别?哪一个效率高? 在link中bool和Boolen有什么区别?哪一个效率高? 解决方案 同一个东西,一个是关键字,一个是类,bool关键字就是这个类 解决方案二: http://blog.sina.com.cn/s/blog_96ea9c6f0101753w.html

link中bool[]数组占用的内存空间怎么计算?是不是比bitarray多?

问题描述 link中bool[]数组占用的内存空间怎么计算?是不是比bitarray多? link中bool[]数组占用的内存空间怎么计算?是不是比bitarray多? 解决方案 BitArray理论上说每8个元素用一个字节,但是实际上要多一些. 布尔值占一字节内存,因此理论上是多少个元素多少个字节,但是实际上也要多一些.

link中bool占用一个字节还是2个字节?为什么书上说是两个字节?

问题描述 link中bool占用一个字节还是2个字节?为什么书上说是两个字节? link中bool占用一个字节还是2个字节?为什么书上说是两个字节? 解决方案 1个字节 解决方案二: 有的人自己不懂瞎贴链接,要懂的话,直接回答就是了. 解决方案三: http://bbs.csdn.net/topics/330234631

正则表达式中test、exec、match的区别介绍及括号的用法

test.exec.match的简单区别 1.test test 返回 Boolean,查找对应的字符串中是否存在模式. var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.test(str)); // true 2.exec exec 查找并返回当前的匹配结果,并以数组的形式返回. var str = "1a1b1c"; var reg = new Re

浅谈java中BigDecimal的equals与compareTo的区别_java

这两天在处理支付金额校验的时候出现了点问题,有个金额比较我用了BigDecimal的equals方法来比较两个金额是否相等,结果导致金额比较出现错误(比如3.0与3.00的比较等). [注:以下所讲都是以sun jdk 1.4.2版本为例,其他版本实现未必一致,请忽略] 首先看一下BigDecimal的equals方法: public boolean equals(Object x){ if (!(x instanceof BigDecimal)) return false; BigDecima

link中Take(1)和 First()有什么区别?

问题描述 link中Take(1)和 First()有什么区别? link中Take(1)和 First()有什么区别? 解决方案 Take(1)返回的是序列,包含一个元素 First返回的是单个元素

php中抽象类和接口的概念以及区别

本篇文章是对php中抽象类和接口的概念以及区别进行了详细的分析介绍,需要的朋友参考下   复制代码 代码如下: //抽象类的定义: abstract class ku{ //定义一个抽象类 abstract function kx(); ...... } function aa extends ku{ //实现抽象类的方法 function kx(){ echo 'sdsf'; } } //使用方法 $aa=new aa; $aa->kx(); //1.定义一些方法,子类必须完全实现这个抽象中所

PHP中超全局变量$GLOBALS和global的区别

本篇文章分享一下关于PHP中的超全局变量$GLOBALS和global的区别. 一.超全局变量$GLOBALS   PHP超全局变量有很多,如下的都属于超全局变量(Superglobal):   $GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV.   官方说明: $GLOBALS - 引用全局作用域中可用的全部变量. 一个包含了全部变量的全局组合数组.变量的名字就是数组的键. 即出现过的全局变量,就