精华内容
下载资源
问答
  • 2020-03-14 22:09:21
    初始化定义:指创建变量并给它赋初始值。
    赋值定义:擦除对象的当前值并用新值代替。
    
    int a = 4;//直接初始化,
    a = 5;//赋值初始化
    总结:赋值初始化和直接初始化对比,直接初始化的效率很高。
    

     

    更多相关内容
  • 类成员初始化和赋值

    2021-12-13 15:35:39
    定义一个变量,就是在内存中为你定义的这个变量开辟一段内存空间,如果这个变量没有初始化,那么系统会随机给这个变量赋一个值,这个值我一般称它为"垃圾数"。 没有初始化的变量我认为它是没有意义的,是在浪费内存...

    定义一个变量,就是在内存中为你定义的这个变量开辟一段内存空间,如果这个变量没有初始化,那么系统会随机给这个变量赋一个值,这个值我一般称它为"垃圾数"。

    没有初始化的变量我认为它是没有意义的,是在浪费内存,就比如人刚出生的时候上帝需要给他赋予点东西,比如条件反射,比如哭,比如吮吸........这样人的意义得以体现。

    对于类的成员来说,我们最好的做法就是在构造函数中对每一个类成员进行初始化。

    我们来看一个简单的例子:

    class name
    {
    public:
        name(int aa, int bb)
        {}
    private:
        int a;
        int b;
    };

    上面例子中的变量 a 和 b 的值都没有在构造函数中初始化,这时候它们的值就会是一个"垃圾数",我们稍微改一下:

    class name
    {
    public:
        name(int aa, int bb):a(aa)
        {
            b = bb;
        }
    private:
        int a;
        int b;
    };

    可以看到 a 的值是用初始化列表的方式进行初始化,而 b 的值是通过构造函数的参数进行赋值。

    在类对象调用构造函数的时候,以上两种方式都可以确保 a 和 b 的值是可以确定的,但是初是初始化和赋值两种方式是有区别的

    1. 初始化发生的时机肯定比赋值早。初始化会在程序刚开始运行的时候发生,而赋值是只有在程序执行到这条语句才会发生。
    2. 初始化的执行效率要比赋值高。类成员在构造函数中执行的赋值语句之前已经被系统进 行了初始化,当执行赋值的时候就需要抹掉之前default的初始化的数据,这样就相当于多做了一次无用功,而构造函数中运行的初始化列表则不需要做这次无用功。
    3. 常量成员和引用成员只能使用初始化列表。这是c++的语法。

    class name
    {
    public:
        name(int aa, int bb):b(bb),a(aa)
        {}
    private:
        int const a;
        int &b;
    };

    代码中的类成员 a 和 b 是必须使用初始化列表初始化的,这是c++语法规定的。

    另外,类成员的初始化的顺序的固定的:如果有基类的话,先初始化基类,然后按照类中声明的顺序去初始化派生类中的类成员。上述代码中可以看到,构造函数初始化列表是先写 b 后写 a,即使是这样也是会按声明的顺序先初始化 a 后初始化 b。

    我们来做一个实验就可以彻底明白:

    class Name
    {
    public:
        Name():b(2),a(b + 2)
        {}
        
        void print()
        {
            cout << "a = " << a << " ,  b = " << b << endl;
        }
    private:
        int const a;
        int b;
    };
    
    int main()
    {
        Name Leon;
        Leon.print();
     
        return 0;
    }

    编译后的结果为:

    结果很明显,当初始化 a 的时候,b还没被初始化为2,b还是个垃圾数,所以最终打印的 a 的值依然是个垃圾数,b 则后面被初始化为 2。

     

     微信公众号:混说Linux

    原文:《类成员初始化和赋值的内幕类成员初始化和赋值的内幕

    展开全文
  • 数组初始化赋值

    千次阅读 2021-02-12 11:04:06
    数组初始化赋值2009-09-17如果有几个object,他们的类型是相同的。创建它们的时候,它们可能在堆里的各个散落位置产生,这样的话,存取效率就会不高。既然它们的类型是相同的,那么我们可以用连续的堆空间来存放...

    数组初始化与赋值

    2009-09-17

    如果有几个object,他们的类型是相同的。创建它们的时候,它们可能在堆里的各个散落位置产生,这样的话,存取效率就会不高。既然它们的类型是相同的,那么我们可以用连续的堆空间来存放它们,并且用同一个标识符封装。对,这个就是数组的来由了。由于这些对象使用同一个标识符,所以要操纵数组内的对象,需要使用方括号下标操作符[]。

    创建并初始化一个数组并赋值

    public class ArrayIni {

    public static void main(String[] args){

    int[] energy = {10, 30, 60, 100, 150};

    int[] powerMood;

    powerMood = energy;

    for (int i = 0; i < powerMood.length; i++)

    powerMood[i] = powerMood[i] * 2;

    for (int i = 0; i < energy.length; i++){

    System.out.println("各形态爆裂模式能量值为" + energy[i] );

    }

    }

    }

    如程序所示,在堆里创建5个int对象,然后用energy来标识这一块连续的堆空间。这5个对象分别表示,幼年期、成长期、成熟期、完全体、究极体的能量值。

    然后我们又定义一个标志符,也可以理解为引用, powerMood = energy 的意思是说,将powerMood也指向那

    展开全文
  • Java 中 HashMap 初始化赋值

    千次阅读 2021-03-04 03:34:29
    1、HashMap 初始化的文艺写法HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化:HashMap map = new HashMap();map.put("name", "test");map.put("age", "20");看完...

    1、HashMap 初始化的文艺写法

    HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化:

    HashMap map = new HashMap();

    map.put("name", "test");

    map.put("age", "20");

    看完这段代码,很多人都会觉得这么写太啰嗦了,文艺青年一般这么来了:

    HashMap map = new HashMap() {

    {

    map.put("name", "test");

    map.put("age", "20");

    }

    };

    看起来优雅了不少,一步到位,一气呵成的赶脚。然后问题来了,这里的双括号”{{}}”到底什么意思,什么用法呢?

    双括号”{{}}”,用来初始化,使代码简洁易读。

    第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class),第二层括弧实际上是一个实例初始化块 (instance initializer block),这个块在内部匿名类构造时被执行。

    2、推而广之,可初始化ArrayList、Set

    List names = new ArrayList() {

    {

    for (int i = 0; i < 10; i++) {

    add("A" + i);

    }

    }

    };

    System.out.println(names.toString());

    3、Java7:增加对collections的支持

    在 Java 7 中你可以像 Ruby, Perl、Python 一样创建collections了, 但是这些集合是不可变的。

    List list = ["item"];

    String item = list[0];

    Set set = {"item"};

    Map map = {"key" : 1};

    int value = map["key"];

    4、文艺写法的潜在问题

    文章开头提到的文艺写法的好处很明显就是一目了然。这里来罗列下此种方法的坏处,如果这个对象要串行化,可能会导致串行化失败。

    1.此种方式是匿名内部类的声明方式,所以引用中持有着外部类的引用。所以当时串行化这个集合时外部类也会被不知不觉的串行化,当外部类没有实现serialize接口时,就会报错。

    2.上例中,其实是声明了一个继承自HashMap的子类。然而有些串行化方法,例如要通过Gson串行化为json,或者要串行化为xml时,类库中提供的方式,是无法串行化Hashset或者HashMap的子类的,从而导致串行化失败。解决办法:重新初始化为一个HashMap对象:

    new HashMap(map);

    这样就可以正常初始化了。

    5、执行效率问题

    当一种新的工具或者写法出现时,猿们都会来一句:性能怎么样?(这和男生谈论妹纸第一句一般都是:“长得咋样?三围多少?”一个道理:))

    关于这个两种写法我这边笔记本上测试文艺写法、普通写法分别创建 10,000,000 个 Map 的结果是 1217、1064,相差 13%。

    public class Test {

    public static void main(String[] args) {

    long st = System.currentTimeMillis();

    /*

    for (int i = 0; i < 10000000; i++) {

    HashMap map = new HashMap() {

    {

    put("name", "test");

    put("age", "20");

    }

    };

    }

    System.out.println(System.currentTimeMillis() - st); // 1217

    */

    for (int i = 0; i < 10000000; i++) {

    HashMap map = new HashMap();

    map.put("name", "test");

    map.put("age", "20");

    }

    System.out.println(System.currentTimeMillis() - st); // 1064

    }

    }

    展开全文
  • 一、我的问题是关于初始化C++类成员的。我见过许多这样的代码: CSomeClass::CSomeClass() { x=0; y=1; } 而在别的什么地方则写成下面的样子: CSomeClass::CSomeClass() : x(0), y(1) { } 我的...
  • java map初始化赋值

    2022-04-03 17:15:42
    **第一种方式:**static 块 public class MapTest { private static final Map<String, String> myMap = new HashMap<String, String>...第二种方式:双括号初始化 (匿名内部类) pu
  • 折腾我挺长一段时间,基本挺明白了,先来个区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。...c++中初始化和赋值操作差别是很大...
  • List的初始化和赋值操作

    万次阅读 2019-03-12 09:52:40
    //初始化 //1.构造 List 后使用 List.add 初始化 List<String> stringList = new LinkedList<>(); stringList.add("a"); stringList.add("b"); stringList.add("c"); //2.使用 {{}} 双括号语法 List<...
  • 一般我们初始化并赋初值是这样做的: HashMap<String, Object> map = new HashMap<>(); map.put("name", "yanggb"); map.put("name1", "huangq"); 但是有时候我们会想在一个表达式中完成初始化并赋...
  • 初始化赋值之间的区别

    千次阅读 2016-03-28 21:25:55
    由于在内置类型中,初始化和赋值不进行区分并不会造成很大的影响,所以让我很大程度上忽略了他们的差别。  直到C++primer中对于构造函数提出了一句话,构造函数有一个初始化部分一个函数体,在一个构造函数中,...
  • c++初始化列表直接赋值的区别

    千次阅读 2018-08-13 23:48:18
    什么是构造函数初始化列表 定义两个构造函数: Sales_data(const std::string &amp;s): bookNo(s) {} Sales_data(const std::string &amp;s, unsigned n, double p):bookNo(s), units_sold(n), revenue...
  • 字符数组的初始化赋值 Dabelv 转载自 https://cloud.tencent.com/developer/article/1177439 代码编译运行环境:VS2017+Win32+Debug 1.字符数组的初始化方式 C语言中表示字符串有两种方式,数组指针,字符数组是...
  • List初始化赋值的几种方式

    万次阅读 2021-02-05 10:24:06
    所以百度了一下,了解了list的其他几种初始化方式,现记录一下。 1.构造 List 后使用 List.add 初始化 List<String> stringList = new LinkedList<>(); stringList.add("a"); stringList.add("b"); ...
  • 声明、定义、初始化赋值

    千次阅读 2019-03-01 10:08:32
    1 声明、定义、初始化赋值 为了将程序拆分成多个逻辑部分来编写,C++语言支持分离式编译机制。它允许我们将程序分割为多个文件,每个文件可以独立编译,最后通过链接器来链接在一起形成一个完整的程序。 为了支持...
  • HashMap 初始化赋值 侵立删

    万次阅读 2019-05-31 19:28:27
    1、HashMap 初始化的文艺写法 HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化: HashMap<String, String> map = new HashMap<String, String>(); ...
  • 初始化赋值的区别

    千次阅读 2015-04-24 15:58:19
    1,初始化赋值 初始化是从无到有的过程,先分配空间,然后再填充数据; 赋值是对己有的对象进行操作。 对于基本数据类型,二者是没有任何区别,对于非基本数据类型,在写法与效率上有许多不同。 memset函数...
  • C++ 赋值和初始化

    2018-03-01 19:38:43
    在某些编译环境下,C++变量会被自动初始化,但在有些环境下变量不会...在类的构造函数中,要区分赋值和初始化的区别:class Test { public: Test(string&amp; name, string&amp; no); private: string my...
  • C++初始化赋值

    2017-09-16 15:06:31
    1、C的初始化比较优雅,都是用花括号进行,简单美观,包括结构体的赋值和变量的复制都可以这样 (1)、int a = {1};  (2)、int array[] = {1,2,3,4,5}; (3)、struct Point point = {2, 3}; (4)...
  • 派生类不能直接访问基类的私有成员,而必须通过基类方法进行访问。...C++使用初始化列表完成这项工作。 RatedPlayer::RatedPlayer(int r, const string &fn):TableTennisPlayer(fn) { rating = r; }12341234 其中
  • 考虑一下效率的可以再构造函数的初始化列表中进行。  class CA  {  public:  int data;  ……  public:  CA();  ……  };  CA::CA():data(0)//……#1……初始化列表方式  {  //data = 0;//...
  • 1、初始化赋值的区别 我们在定义变量时习惯于对其立即进行初始化,有时候也会先定义再赋值。由于赋值初始化都是通过“=”来完成的,以至于很多时候我们忽略了二者的去呗,实际上这二者时候很大区别的。 string ...
  • C++ 声明、定义、初始化赋值

    千次阅读 2019-07-26 00:20:44
    一般我们进行成员变量初始化用两种方法 第一种是通过在构造函数内赋值 class Point { public: Point(){ _x = 0; _y = 0;}; Point( int x, int y ){ _x = 0; _y = 0; } private: int _x, _y; }; 第二种是...
  • 类的成员变量需要保证初始化后使用,而在初始化列表进行成员变量的初始化效率比在构造函数内部初始化效率更高。 原因: 构造函数内部初始化成员变量时,先调用这些成员变量的default构造函数,再通过拷贝赋值...
  • 构造函数初始化列表构造函数体内赋值初始化列表对成员变量做的事情叫做初始化,而构造函数体内对成员变量做的事情就叫做赋值了。 整个构造函数的执行过程包括(初始化列表以及构造函数体内)都属于该对象初始...
  • 第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class),第二层括弧实际上是一个实例初始化块 (instance initializer block),这个块在内部匿名类构造时被执行。 2、推而广之,可初始化ArrayList、Set...
  • Java HashMap 初始化赋值

    万次阅读 2018-01-31 14:35:41
    转自:... 1、HashMap 初始化的文艺写法 看完这段代码,很多人都会觉得这么写太啰嗦了,文艺青年一般这么来了: HashMap map = new HashMap() {  {  map.put("name", "test");  
  • C#中数组已经如下初始化后: int [] myIntArray={0,1,2,3,4}; 是不是上述语句后面,不允许再用如下语句: myIntArray={5,9,10,2,99};

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 198,772
精华内容 79,508
关键字:

初始化和赋值效率