Java中long和Long有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中long和Long有啥区别相关的知识,希望对你有一定的参考价值。
Java中long和Long区别如下
long是数据类型,与int,flot等是类似的,返回的是long类型,官方API说明如下
Long是将long型的量当作对象来处理,它必须以long型的量作为参数。官方API说明如下
从代码中可以很明显解释了上面1,2的区别
而Long是一个类
由于Java的自动封包的出现,区别已经不太明显了,大概关系也就像int和Integer一样。
你可以在Long里找到许多方法,但是却不能在long中发现任何方法本回答被提问者采纳 参考技术B 一个是java基本类型long长整型
一个是java封装类Long,Long里面有多个对long的操作方法
java 有8大封装类对应8个基本类型,可以百度了解一下
C++ 中的“long”、“long long”、“long int”和“long long int”有啥区别?
【中文标题】C++ 中的“long”、“long long”、“long int”和“long long int”有啥区别?【英文标题】:What is the difference between "long", "long long", "long int", and "long long int" in C++?C++ 中的“long”、“long long”、“long int”和“long long int”有什么区别? 【发布时间】:2013-09-24 01:49:19 【问题描述】:我正在从 Java 过渡到 C++,并且对 long
数据类型有一些疑问。在 Java 中,要保存大于 232 的整数,您只需编写 long x;
。但是,在 C++ 中,long
似乎既是数据类型又是修饰符。
long
似乎有几种使用方式:
long x;
long long x;
long int x;
long long int x;
另外,好像有这样的东西:
long double x;
等等。
所有这些不同的数据类型有什么区别,它们的目的是否相同?
【问题讨论】:
***.com/q/6462439/139010 @user2612743 - 为了安全起见,请考虑您的要求并使用适当的类型。long long
可能比 long
慢,后者可能比 int
慢。
msdn.microsoft.com/en-us/library/s3f49ktz.aspx
不,“为了安全,用long long”就等于说“为了安全,给每个人一个地球艾滋病,所以我们不用担心安全性行为,我们”反正大家都已经拿到了!”傻,不是吗?考虑数据及其可能具有的值,并使用最合适的类型。这也有助于编译器在不破坏原始代码意图的情况下进行额外的优化,例如如果它必须加载额外的库来处理大于目标平台自然位宽的数字。
对 win32 列表框等使用 long long 不会破坏您的内存和其他变量 - 即使没有违反限制。即使有看似无害的 C4244 警告,也不容易检测到。
【参考方案1】:
long
和 long int
是相同的。 long long
和 long long int
也是如此。在这两种情况下,int
都是可选的。
至于这两个集合之间的区别,C++ 标准规定了每个集合的最小范围,并且long long
至少与long
一样宽。
标准的控制部分(C++11,但这已经存在了很长时间)例如,3.9.1 Fundamental types
,第 2 节(后面的部分给出了无符号整数类型的类似规则):
有五种标准有符号整数类型:signed char、short int、int、long int 和 long long int。在此列表中,每种类型提供的存储空间至少与列表中它前面的类型一样多。
7.1.6.2 Simple type specifiers
中还有一个表9,它显示了说明符到实际类型的“映射”(表明int
是可选的),其中一部分如下所示:
Specifier(s) Type
------------- -------------
long long int long long int
long long long long int
long int long int
long long int
注意说明符和类型之间的区别。说明符是您告诉编译器类型是什么的方式,但您可以使用不同的说明符以最终获得相同的类型。
因此long
本身既不是类型也不是您的问题所提出的修饰符,它只是long int
类型的说明符。 long long
也是 long long int
类型的说明符。
虽然 C++ 标准本身并没有指定整数类型的最小范围,但它确实引用了 C99,在 1.2 Normative references
中作为应用。因此,C99 5.2.4.2.1 Sizes of integer types <limits.h>
中规定的最小范围是适用的。
就long double
而言,这实际上是一个浮点值,而不是一个整数。与整数类型类似,它需要至少具有与 double
一样高的精度,并提供该类型的值的超集(意味着 至少 这些值,不一定更多 值)。
【讨论】:
与unsigned
和unsigned int
相同
我很确定 long
至少为 32 位(零的任一侧为 2^31-1),long long
至少为 64(任一侧为 2^63-1 )。
而long double
保证至少有double
的范围,但也可能相同。这取决于计算机。一些 FPU 具有扩展精度; x87 芯片具有 32 位单精度、64 位双精度和 80 位扩展精度。
关于范围要求,C++11标准参考C11标准,有实际范围。
@AbhishekMane:我相信long int(b)
的问题可能仅仅是long
被认为与其他演员int(b)
是分开的。如果您使用long(b)
或(long int)(b)
甚至typedef long int LI;
或using LI = long int;
与LI(b)
之一,它工作正常。不过,我发现很难引起很多兴趣,因为 C++ 开发人员可能应该尽可能避免使用旧样式转换。如果您要合并旧版 C 代码但 C 中没有 <someType>(var)
,请务必使用 (long int)b
:-)【参考方案2】:
Long 和 long int 至少为 32 位。
long long 和 long long int 至少为 64 位。您必须使用 c99 或更好的编译器。
长双打有点奇怪。 Look them up on Wikipedia for details.
【讨论】:
【参考方案3】:long
等价于long int
,正如short
等价于short int
。 long int
是至少 32 位的有符号整数类型,而long long
或long long int
是至少 64 位的有符号整数类型。
这并不一定意味着long long
比long
宽。许多平台/ABI 使用LP64
模型 - 其中long
(和指针)为 64 位宽。 Win64 使用LLP64
,其中long
仍然是32 位,而long long
(和指针)是64 位宽。
64位数据模型here有一个很好的总结。
long double
除了至少和double
一样宽之外,不能保证太多。
【讨论】:
【参考方案4】:这看起来令人困惑,因为您将 long
作为数据类型本身。
long
只不过是您单独使用long int
的简写。
long
是一个修饰符,您可以将它与double
一起使用,也可以作为long double
使用。
long
== long int
.
它们都占用 4 个字节。
【讨论】:
长占用 4 字节仅在 Win64 上有效,取决于平台 是的,显然...不仅 long...int 占用 4 个字节,而且 2 个字节取决于平台,毫无疑问。【参考方案5】:虽然在 Java 中 long
始终为 64 位,但在 C++ 中,这取决于计算机体系结构和操作系统。例如,long
在 Linux 上是 64 位,在 Windows 上是 32 位(这是 done to keep backwards-compatability,允许 32 位程序在 64 位 Windows 上编译而无需任何更改)。 long int
是 long
的同义词。
后来,long long
被引入表示“这次在 Windows 上真正的长(64 位)”。 long long int
是这个的同义词。
避免short
、int
、long
等是considered good C++ style,而是使用:
std::int8_t # exactly 8 bits
std::int16_t # exactly 16 bits
std::int32_t # exactly 32 bits
std::int64_t # exactly 64 bits
std::size_t # can hold all possible object sizes, used for indexing
您可以通过包含<cstdint>
标头来使用这些int*_t
类型。 size_t
在<stdlib.h>
中。
【讨论】:
【参考方案6】:从历史上看,在早期的 C 时代,当处理器有 8 位或 16 位字长时,int
与今天的short
(16 位)相同。在某种意义上,int 是一种比char
,short
,long
orlong long
更抽象的数据类型,因为您无法确定位宽。
在定义int n;
时,您可以将其翻译为“在这台机器上为 n 提供位宽和速度的最佳折衷方案”。也许将来您应该期望编译器将int
转换为 64 位。因此,当您希望变量具有 32 位而不是更多时,最好使用显式long
作为数据类型。
[编辑:#include <stdint.h>
似乎是使用 int##_t 类型确保位宽的正确方法,尽管它还不是标准的一部分。]
【讨论】:
最后一部分,当 int 为 64 位时使用“long”来获取 32 位,这是不正确的。如果 int 是 64 位,那么 long 也将是至少 64 位。 Long 保证至少 与 int 一样大,尽管它可能更大,但绝不会更小。大多数编译器都有各种方法可以让程序员更具体,例如(不可移植的)__int32 类型,它恰好是 32 位,等等。 按照 C 标准中的定义,long
保证至少 32 位。 (标准可能会改变。)当前的 C++14 草案只是说:@C.M. “普通整数具有执行环境架构所建议的自然大小,提供其他有符号整数类型以满足特殊需求”(第 3.9.1 节)。我没有找到关于其中各种整数的长度关系的消息。 __int32 并不是真正的标准的一部分,但由于 C++11 有可用的 typedef,如 int_fast32_t 或 int_least32_t 可以让你得到你想要的。
我想说,在 20 世纪通用可重编程微型计算机的实现中,char
几乎一致为 8 位,short
为 16,long
为 32; int
可以是 16 或 32。请注意,对于某些平台(尤其是 68000),16 位和 32 位 int
都很常见,而且确实有些编译器可以选择支持其中任何一个。因此,需要可移植的代码应该使用short
或long
而不是int
。【参考方案7】:
没有定义, (long long x ) 等价于 (long long int x ),但是第二个确认变量 x 是整数
【讨论】:
这个答案对之前的答案有什么补充?以上是关于Java中long和Long有啥区别的主要内容,如果未能解决你的问题,请参考以下文章