Java基本数据类型

类型类别 类型名称 大小(位) 取值范围 默认值
整数类型 byte 8 -128 到 127 0
short 16 -32,768 到 32,767 0
int 32 -2^31 到 2^31-1 0
long 64 -2^63 到 2^63-1 0L
浮点数类型 float 32 精度约为 6-7 位十进制数 0.0f
double 64 精度约为 15 位十进制数 0.0d
字符类型 char 16 0 到 65,535(无符号)
布尔类型 boolean 未指定 truefalse false

注意:

  1. Java的char类型是基于Unicode编码的,因此可以表示全球上几乎所有的字符。
  2. Java的基本数据类型大小是固定的,与平台无关,这有助于Java程序具有良好的可移植性。
  3. Java中没有表示无符号整数的基本数据类型,在需要大范围无符号数据时通常使用更大的类型或使用类库。
  4. 布尔类型boolean并没有明确指定大小,但仅能取truefalse中的一个值。
阅读全文 »

C++的模板(Templates)和Java的泛型(Generics)都是用于实现代码的参数化类型,但是它们在设计理念、实现机制和功能上有很大的不同。下面是几个主要的区别:

1. 编译时机

  • C++模板是在编译时进行实例化的。当模板用特定类型实例化时,编译器会生成这个类型的具体代码。这种方法称为模板元编程(template metaprogramming),它允许非常灵活和强大的类型操作,但也会增加编译时间和生成的二进制文件大小。
  • Java泛型是基于类型擦除实现的,这意味着泛型信息只在编译时用于类型检查,然后被擦除,运行时并不存在具体类型的信息。泛型类和方法在编译后都会转换为普通的类和方法,泛型类型参数会替换为它们的边界或者Object。因此,在运行时是没有类型参数的具体信息的。
阅读全文 »

在C++中,const关键字的位置相对于类型和星号(*,用于指针)或者引用符号(&)会影响它修饰的内容。这些不同的位置可以表示不同的含义,例如指针常量、常量指针、常量引用等。以下是const位置对含义的影响:

1. 指针和const

  • const在类型前:

    1
    const int* ptr;

    这意味着ptr是一个指向const int的指针。你不能通过这个指针修改它指向的值,但是你可以修改指针ptr本身,使它指向另一个地址。

  • const在星号后:

    1
    int* const ptr = &someIntVar;

    这意味着ptr是一个指向int的常量指针。你可以修改指针所指向的值,但是不能修改指针ptr本身的值,即不能让它指向另一个地址。这里,指针必须在声明时初始化,并且之后不能再指向其他地址。

  • const同时在类型前和星号后:

    1
    const int* const ptr = &someIntVar;

    ptr是一个指向const int的常量指针。既不能通过指针修改所指向的值,也不能修改指针本身的值。

阅读全文 »

虚函数-纯虚函数区别

1
2
3
1. 虚函数允许派生类根据自己的需要重写基类的行为。在基类中,你通过在函数声明前加上virtual关键字来声明虚函数。
2. 纯虚函数(Pure Virtual Function)
纯虚函数是一种特殊的虚函数,你无法为其提供实现,而是在其声明时将其初始化为0。声明一个或多个纯虚函数的类称为抽象类(Abstract Class),你不能创建抽象类的实例。纯虚函数的目的是强制派生类提供自己的实现。

在C++中,成员函数的重写(override)是多态的一个核心概念,它允许派生类改变基类中某个函数的行为。对于虚函数来说,派生类确实可以直接重写基类中的虚函数。但是,对于非虚函数,派生类也可以提供自己的实现,这通常被称为隐藏(hiding)而不是重写。

我们来区分一下:

  1. 函数隐藏(Function Hiding):如果派生类声明了一个和基类同名的成员函数(即使参数列表不同),它将隐藏所有基类中具有相同名称的成员函数。在派生类的对象中调用这个函数时,只有派生类的版本可见,基类的版本被隐藏了。
  2. 函数重写(Function Overriding):仅当派生类中的函数与基类中的虚函数有相同的签名(函数名、参数列表、const属性等)时,才称之为重写。在派生类的对象上调用这样的函数时,将使用动态绑定,根据对象的实际类型调用相应类的函数实现。
阅读全文 »
0%