-
面试官:兄弟,说说基本类型和包装类型的区别吧
2019-09-29 08:36:07Java 的每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。基本类型和包装类型的区别主要有以下 4 点。六年前,我从苏州回到洛阳,抱着一幅“海归”的心态,投了不少简历,也“约谈”了不少面试官,但仅有两三个令我感到满意。其中有一位叫老马,至今还活在我的手机通讯录里。他当时扔了一个面试题把我砸懵了:说说基本类型和包装类型的区别吧。
我当时二十三岁,正值青春年华,从事 Java 编程已有 N 年经验(N < 4),自认为所有的面试题都能对答如流,结果没想到啊,被“刁难”了——原来洛阳这块互联网的荒漠也有技术专家啊。现在回想起来,脸上不自觉地泛起了羞愧的红晕:主要是自己当时太菜了。不管怎么说,是时候写篇文章剖析一下基本类型和包装类型的区别了。
Java 的每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。基本类型和包装类型的区别主要有以下 4 点。
01、包装类型可以为 null,而基本类型不可以
别小看这一点区别,它使得包装类型可以应用于 POJO 中,而基本类型则不行。
POJO 是什么呢?这里稍微说明一下。
POJO 的英文全称是
Plain Ordinary Java Object
,翻译一下就是,简单无规则的 Java 对象,只有属性字段以及 setter 和 getter 方法,示例如下。class Writer { private Integer age; private String name; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
和 POJO 类似的,还有数据传输对象 DTO(Data Transfer Object,泛指用于展示层与服务层之间的数据传输对象)、视图对象 VO(View Object,把某个页面的数据封装起来)、持久化对象 PO(Persistant Object,可以看成是与数据库中的表映射的 Java 对象)。
那为什么 POJO 的属性必须要用包装类型呢?
《阿里巴巴 Java 开发手册》上有详细的说明,我们来大声朗读一下(预备,起)。
数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出
NullPointerException
的异常。02、包装类型可用于泛型,而基本类型不可以
泛型不能使用基本类型,因为使用基本类型时会编译出错。
List<int> list = new ArrayList<>(); // 提示 Syntax error, insert "Dimensions" to complete ReferenceType List<Integer> list = new ArrayList<>();
为什么呢?因为泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是 Object 类及其子类——基本类型是个特例。
03、基本类型比包装类型更高效
基本类型在栈中直接存储的具体数值,而包装类型则存储的是堆中的引用。
很显然,相比较于基本类型而言,包装类型需要占用更多的内存空间。假如没有基本类型的话,对于数值这类经常使用到的数据来说,每次都要通过 new 一个包装类型就显得非常笨重。
03、两个包装类型的值可以相同,但却不相等
两个包装类型的值可以相同,但却不相等——这句话怎么理解呢?来看一段代码就明明白白了。
Integer chenmo = new Integer(10); Integer wanger = new Integer(10); System.out.println(chenmo == wanger); // false System.out.println(chenmo.equals(wanger )); // true
两个包装类型在使用“”进行判断的时候,判断的是其指向的地址是否相等。chenmo 和 wanger 两个变量使用了 new 关键字,导致它们在“”的时候输出了 false。
而
chenmo.equals(wanger)
的输出结果为 true,是因为 equals 方法内部比较的是两个 int 值是否相等。源码如下。private final int value; public int intValue() { return value; } public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
瞧,虽然 chenmo 和 wanger 的值都是 10,但他们并不相等。换句话说就是:将“==”操作符应用于包装类型比较的时候,其结果很可能会和预期的不符。
04、自动装箱和自动拆箱
既然有了基本类型和包装类型,肯定有些时候要在它们之间进行转换。把基本类型转换成包装类型的过程叫做装箱(boxing)。反之,把包装类型转换成基本类型的过程叫做拆箱(unboxing)。
在 Java SE5 之前,开发人员要手动进行装拆箱,比如说:
Integer chenmo = new Integer(10); // 手动装箱 int wanger = chenmo.intValue(); // 手动拆箱
Java SE5 为了减少开发人员的工作,提供了自动装箱与自动拆箱的功能。
Integer chenmo = 10; // 自动装箱 int wanger = chenmo; // 自动拆箱
上面这段代码使用 JAD 反编译后的结果如下所示:
Integer chenmo = Integer.valueOf(10); int wanger = chenmo.intValue();
也就是说,自动装箱是通过
Integer.valueOf()
完成的;自动拆箱是通过Integer.intValue()
完成的。理解了原理之后,我们再来看一道老马当年给我出的面试题。// 1)基本类型和包装类型 int a = 100; Integer b = 100; System.out.println(a == b); // 2)两个包装类型 Integer c = 100; Integer d = 100; System.out.println(c == d); // 3) c = 200; d = 200; System.out.println(c == d);
答案是什么呢?有举手要回答的吗?答对的奖励一朵小红花哦。
第一段代码,基本类型和包装类型进行 == 比较,这时候 b 会自动拆箱,直接和 a 比较值,所以结果为 true。
第二段代码,两个包装类型都被赋值为了 100,这时候会进行自动装箱,那 == 的结果会是什么呢?
我们之前的结论是:将“==”操作符应用于包装类型比较的时候,其结果很可能会和预期的不符。那结果是 false?但这次的结果却是 true,是不是感觉很意外?
第三段代码,两个包装类型重新被赋值为了 200,这时候仍然会进行自动装箱,那 == 的结果会是什么呢?
吃了第二段代码的亏后,是不是有点怀疑人生了,这次结果是 true 还是 false 呢?扔个硬币吧,哈哈。我先告诉你结果吧,false。
为什么?为什么?为什么呢?
事情到了这一步,必须使出杀手锏了——分析源码吧。
之前我们已经知道了,自动装箱是通过
Integer.valueOf()
完成的,那我们就来看看这个方法的源码吧。public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
难不成是 IntegerCache 在作怪?你猜对了!
private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { // high value may be configured by property int h = 127; int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); h = Math.min(i, Integer.MAX_VALUE - (-low) -1); high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } }
大致瞟一下这段代码你就全明白了。-128 到 127 之间的数会从 IntegerCache 中取,然后比较,所以第二段代码(100 在这个范围之内)的结果是 true,而第三段代码(200 不在这个范围之内,所以 new 出来了两个 Integer 对象)的结果是 false。
看完上面的分析之后,我希望大家记住一点:当需要进行自动装箱时,如果数字在 -128 至 127 之间时,会直接使用缓存中的对象,而不是重新创建一个对象。
自动装拆箱是一个很好的功能,大大节省了我们开发人员的精力,但也会引发一些麻烦,比如下面这段代码,性能就很差。
long t1 = System.currentTimeMillis(); Long sum = 0L; for (int i = 0; i < Integer.MAX_VALUE;i++) { sum += i; } long t2 = System.currentTimeMillis(); System.out.println(t2-t1);
sum 由于被声明成了包装类型 Long 而不是基本类型 long,所以
sum += i
进行了大量的拆装箱操作(sum 先拆箱和 i 相加,然后再装箱赋值给 sum),导致这段代码运行完花费的时间足足有 2986 毫秒;如果把 sum 换成基本类型 long,时间就仅有 554 毫秒,完全不一个等量级啊。05、最后
谢谢大家的阅读,原创不易,喜欢就点个赞,这将是我最强的写作动力。如果你觉得文章对你有所帮助,也蛮有趣的,就关注一下我的公众号,谢谢。
-
Mysql修改字段名、修改字段类型
2018-02-23 15:45:02mysql修改字段类型: --能修改字段类型、类型长度、默认值、注释 --对某字段进行修改 ALTER TABLE 表名 MODIFY COLUMN 字段名 新数据类型 新类型长度 新默认值 新注释; -- COLUMN可以省略 alter table table1 ...1 修改字段类型、字段名、字段注释、类型长度、字段默认值
mysql修改字段类型: --能修改字段类型、类型长度、默认值、注释 --对某字段进行修改 ALTER TABLE 表名 MODIFY [COLUMN] 字段名 新数据类型 新类型长度 新默认值 新注释; -- COLUMN关键字可以省略不写 alter table table1 modify column column1 decimal(10,1) DEFAULT NULL COMMENT '注释'; -- 正常,能修改字段类型、类型长度、默认值、注释 alter table table1 modify column1 decimal(10,2) DEFAULT NULL COMMENT '注释'; -- 正常,能修改字段类型、类型长度、默认值、注释 mysql修改字段名: ALTER TABLE 表名 CHANGE [column] 旧字段名 新字段名 新数据类型; alter table table1 change column1 column1 varchar(100) DEFAULT 1.2 COMMENT '注释'; -- 正常,此时字段名称没有改变,能修改字段类型、类型长度、默认值、注释 alter table table1 change column1 column2 decimal(10,1) DEFAULT NULL COMMENT '注释' -- 正常,能修改字段名、字段类型、类型长度、默认值、注释 alter table table1 change column2 column1 decimal(10,1) DEFAULT NULL COMMENT '注释' -- 正常,能修改字段名、字段类型、类型长度、默认值、注释 alter table table1 change column1 column2; -- 报错 mysql> alter table white_user change column name nick_name varchar(50) null comment '昵称'; -- 正确 Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
2 修改表名
ALTER TABLE 旧表名 RENAME TO 新表名 ; mysql> show tables ; +-------------------+ | Tables_in_db_test | +-------------------+ | white_user | +-------------------+ 1 row in set (0.00 sec) mysql> alter table white_user rename to white_user_new ; Query OK, 0 rows affected (0.00 sec) mysql> show tables ; +-------------------+ | Tables_in_db_test | +-------------------+ | white_user_new | +-------------------+ 1 row in set (0.00 sec)
3 修改表的注释
ALTER TABLE 表名 COMMENT '新注释' mysql> alter table white_user_new comment '新表-白名单表' ; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table white_user_new ; CREATE TABLE `white_user_new` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) NOT NULL COMMENT '姓名', `created_time` datetime DEFAULT NULL COMMENT '创建时间', `updated_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='新表-白名单表'
4
在指定位置插入新字段
ALTER TABLE 表名 ADD [COLUMN] 字段名 字段类型 是否可为空 COMMENT '注释' AFTER 指定某字段 ; --COLUMN关键字可以省略不写 mysql> alter table white_user_new add column erp varchar(50) not null comment 'erp账号' after name ; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 --在name字段后面添加erp字段 mysql> show create table white_user_new ; CREATE TABLE `white_user_new` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) NOT NULL COMMENT '姓名', `erp` varchar(50) NOT NULL COMMENT 'erp账号', `created_time` datetime DEFAULT NULL COMMENT '创建时间', `updated_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='新表-白名单表' mysql> alter table white_user_new add position varchar(50) not null comment '岗位' after name ; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 --在name字段后面添加position字段。 mysql> show create table white_user_new ; CREATE TABLE `white_user_new` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) NOT NULL COMMENT '姓名', `position` varchar(50) NOT NULL COMMENT '岗位', `erp` varchar(50) NOT NULL COMMENT 'erp账号', `created_time` datetime DEFAULT NULL COMMENT '创建时间', `updated_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='新表-白名单表' mysql> alter table white_user_new add mobile varchar(50) not null comment '手机号码' before position ; --报错,在position字段前添加mobile字段,不能使用before关键字
5 删除字段
ALTER TABLE 表名 DROP [COLUMN] 字段名 ; --COLUMN关键字可以省略不写 mysql> alter table white_user_new drop column position ; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table white_user_new drop erp ; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table white_user_new ; CREATE TABLE `white_user_new` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) NOT NULL COMMENT '姓名', `created_time` datetime DEFAULT NULL COMMENT '创建时间', `updated_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='新表-白名单表'
欢迎关注我的公众号
-
pandas的dataframe如何更改数据类型?
2018-07-22 20:38:16pandas的dataframe数据类型转换 在使用pandas库进行数据分析时,有时候会需要将object类型转换成数值类型(float,int),那么如何做呢? 主要有以下三种方法:创建时指定类型,df.astype强制类型转换,以及使用pd....pandas的dataframe数据类型转换
在使用pandas库进行数据分析时,有时候会需要将object类型转换成数值类型(float,int),那么如何做呢?
主要有以下三种方法:创建时指定类型,df.astype强制类型转换,以及使用pd.to_numeric() 转换成适当数值类型。
一,创建时指定类型
二,使用df.astype()强制类型转换
三,使用pd.to_numeric() 转换成适当数值类型
-
Golang 之区分类型别名与类型定义
2019-07-06 17:12:14Golang 之区分类型别名(Type Alias)与类型定义(Type define)一、类型别名(Type Alias)、类型定义是什么?二、区分类型别名与类型定义类型定义 类型别名 类型定义 区分类型别名、类型定义 非本地类型不能...Golang 之区分类型别名(Type Alias)与类型定义(Type define)
- 类型别名
- 类型定义
- 区分类型别名、类型定义
- 非本地类型不能定义方法
一、类型别名(Type Alias)、类型定义是什么?
类型别名 是 Go 1.9 版本添加的新功能。主要应用于代码升级、工程重构、迁移中类型的兼容性问题。C/C++ 语言中,代码的重构升级可以使用宏快速定义新的代码。Go 语言中并未选择通过宏,而是选择通过类型别名解决重构中最复杂的类型名变更问题。
- 在 Go 1.9 版本之前内建类型定义的代码如下:
-
type byte uint8 type rune int32
- 在Go 1.9 版本之后内建类型定义的代码如下:
-
通过以上可以看出这个修改就是配合类型别名进行修改的。type byte = uint8 type rune = int32
二、区分类型别名与类型定义
- 类型别名规定:Type Alias只是Type 的别名,本质上Type Alias 与Type是同一个类型,即基本数据类型是一致的。好比如我们小时家里人给我们起的小名,上学后英语老师给起的英文名字,但是这个名字都是指的我们自己。
- 表面上看类型别名与类型定义只有一个等号的差异("="),实际上的差异我们通过一段简短的代码更为深刻的理解二者之间的差异,如下代码所示;
package main import "fmt" // 自定义类型myInt,基本类型是int type myInt int //将 int 类型取一个别名intAlias type intAlias = int func main() { //声明 a变量为自定义 myInt 类型 var a myInt // 输出 a 的类型 和默认值 fmt.Printf("a Type: %T, value: %d\n", a, a) //声明 b变量为 intAlias 类型 var b intAlias // 输出 b 的类型 和默认值 fmt.Printf("b Type: %T, value: %d\n", b, b) } == 输出结果 ==: a Type: main.myInt, value: 0 b Type: int, value: 0
- 从上面的结果我们可以看出,a 的类型是 main.myInt,表示main 包下定义的myInt 类型。生成了新的数据类型。
- b 的类型是 int 。intAlias 类型只会在代码中存在,编译完成时,不会有 intAlias 类型。
类型定义
类型定义:依据基本类型声明一个新的数据类型。
// 新声明一个变量c intAlias 类型 var c intAlias c = a fmt.Printf("c Type: %T, value: %d\n", c, c) OutPut Result: cannot use a (type myInt) as type int in assignment
从以上可以看出,变量 a 和 c 不是同一个类型,因此不能直接赋值;可以通过强制类型转换,实现 修改为 c=int(a)。
-
elasticSearch字段类型大全
2020-08-29 23:25:13ES字段类型 核心数据类型 String类型:text、keywork number类型:long,integer,short,byte,double,float,half_float,scaled_float date类型:date boolean类型:boolean binary类型 : binary range类型:... -
E0144 “const char *“ 类型的值不能用于初始化 “char *“ 类型的实体
2018-07-29 16:24:30代码来自c++primer plus 6 第14章c++中的代码重用 ,第552、553页。 按照书中的源码,在visual studio 2017 中编译出现如下错误; E0144 ...严重性 代码 说明 文件 行 ... 类型的实体 c:\Users\dell\source\rep... -
MyBatis查询结果resultType返回值类型详细介绍
2018-03-12 08:56:41一、返回一般数据类型 比如要根据id 属性获得数据库中的某个字段值。 mapper 接口: // 根据id 获得数据库中的username 字段的值 String getEmpNameById(Integer id); SQL 映射文件: &lt;!-- ... -
Java引用数据类型String详解
2020-07-02 23:54:44Java引用数据类型(String)引用数据类型概述引用数据类型与基本数据类型的差别(举例说明) 引用数据类型概述 说到引用数据类型,那么何为引用数据类型? 引用类型,都可以用null值作为值,也就是说可以在初始化的... -
Linux下七种文件类型、文件属性及其查看方法
2018-02-01 22:11:151、七种文件类型 普通文件类型 Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-] 目录文件 就是目录, 能用 # cd 命令进入的。第... -
java基本数据类型的转换
2020-07-03 10:39:12java基本数据类型的转换自动类型转换强制类型转换 自动类型转换 举例:多种不同的数据类型的一起运算 解释:有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那个数据类型,然后再进行计算。 ... -
Java进阶(二十三)java中long类型转换为int类型
2016-03-02 20:27:14java中long类型转换为int类型 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一、强制类型转换 ... -
JavaScript专题(六)类型检测
2020-08-20 19:11:57JavaScript专题之如何判断数据类型 目录 一、typeof 二、instanceof 三、constructor 四、stringTag是什么? 五、实现几个数据检测的方法 写在最后 前言 在《JavaScript的数据类型》中我们也提到过简单的类型检测... -
postgresql数字类型
2017-12-06 22:11:27postgresql的数据类型很多,也可以使用create type命令创建自定义数据类型,但常用的数据类型是以下三种: l数字数据类型 l字符串数据类型 l日期/时间数据类型 数字数据类型 数字数据类型用于指定表中的数字数据,... -
基本类型与装箱基本类型的使用规律(效率相差数10倍)
2017-06-06 11:09:56加入qq群,与博主共享知识库:778444458;...今天在学习Effective Java第2版书时看到了一个实例:首先说下基本类型(如long,int,double)和装箱基本类型(Long,Int,Double);具体情况可看图 ... -
C语言数据类型——基本类型,构造类型,枚举类型,指针类型
2019-05-05 20:00:192.1.数组类型[] 2.1.1.字符数组 2.1.2.一维数组 2.1.3.二维数组 2.1.4.三维数组 2.2.结构体类型struct 2.2.1.定义 2.2.2.结构体变量 2.2.3.结构体数组 2.2.4.指向结构体的指针 2.2.5.指向... -
JavaScript专题(七)类型转换
2020-09-23 18:43:46类型转换常常为人诟病,但实际上很多时候它们是非常有用的,有些强制类型转换可以明确告诉我们哪里发生了类型转换,有助于提高代码可读性和可维护性。但有些却发生在我们看不见的地方,所以我们今天来讨论一下平时... -
JS数据类型之基本数据类型
2019-06-28 16:46:431.JavaScript(以下简称js)的数据类型分为两种:原始类型(即基本数据类型)和对象类型(即引用数据类型); 2.js常用的基本数据类型包括undefined、null、number、boolean、string; 3.js的引用数据类型也就是... -
Java基本数据类型与类型转换
2019-12-10 23:39:00本文关键字:8种、基本数据类型、整数类型、浮点类型、字符类型、布尔类型。 -
004 Golang基本数据类型 | 目标是成为Golang大师
2021-01-25 11:06:24在计算机中存储着各种各样的数据,图片、音乐、电影等等… 所以就需要不同的数据类型来表示这些数据 所有在计算机中的数据都是以二进制数字(binary digit)的形式存储 在go语言中,根据二进制数字的位数长度和... -
C++ 基本数据类型和表达式
2017-04-10 10:34:191. C++是一种静态类型语言(运行前指定每个数据的类型),也是一种强类型语言(对数据的操作进行严格的类型检查)。 2. bool类型数据在算术运算时true对应1,false对应0。 3. typedef给已有类型取别名 typedef ; ... -
Java八种基本数据类型(图文详解)
2020-07-02 22:54:55Java八种基本数据类型Java八种数据类型Java八种数据类型的分类(图)基本数据类型分为三大类①数值型②字符型③布尔型数值型整数类型(byte,short,int,long)浮点型(float,double)字符型(char)布尔类型(boolean)... -
Java中Long型数据类型对应MySQL数据库中哪种类型?
2018-08-25 18:12:05Long型id数据对应MySQL数据库中 bigint 数据类型; System.out.println(1==1L); //ture System.out.println(1L); //1 System.out.println(1L+"2"); //12 java类 mysql数据库 java.lang.Byte ... -
Python数据类型有哪些,哪些是可变类型,哪些是不可变类型?
2021-01-31 20:06:53Python数据类型有哪些,哪些是可变类型,哪些是不可变类型? 类型: 整数int 字符串str 浮点数float 布尔型bool 列表list 字典dict 集合set 元组tuple 可变类型:就是这个数据类型的值在不改变这一块内存空间,而去... -
C++ 类型转换
2017-12-11 14:10:15只提供编译时的类型检查,没有运行时类型检查。完全不相干类型之间的转换是不允许的,编译器会报错。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 虽然也允许进行下行转换(把基类指针或引用转换... -
【基本类型】——基本类型与包装类型
2018-12-19 11:11:48一、基本类型 Java一种静态编程语言,所有变量和表达式是在编译时就确定的。同时,Java又是一种强类型语言,所有的变量和表达式都有具体的类型,并且每种类型是严格定义的。类型限制了变量可以hold什么样的值,... -
C# - 值类型与引用类型
2019-02-28 19:52:35分享一个大牛的人工智能教程。...因此,一个值类型变量永远不会影响到其他的值类型变量,而两个引用类型变量则很有可能指向同一地址,从而产生相互影响。 从内存分配上看,值类型分配在线程的栈上,作用... -
python--打印数据类型(五)
2018-05-14 14:19:15python--打印数据类型(五) 更多原创性能测试文章关注 十年性能测试专家&7DGroup公众号 # 确定数据类型 a = '324324' b = int(a) print(b) c= float(b) print(c) # 分别打印出a、b、c 三个变量的类型 ... -
C语言结构体类型的定义和使用(一)
2019-08-16 16:50:390x00 前言 文章中的文字可能存在语法错误以及标点错误,请谅解; 如果在文章中发现代码错误或其它问题请告知,感谢!...0x01 结构体类型的定义 0x02 结构体类型变量的定义 0x03 结构体类型变量初始化和引用 ... -
【Oracle】timestamp类型转换成date类型
2015-10-23 14:54:31Oracle timestamp类型通过“+0”可以直接转换成date类型 -
Java中如何将int 类型转换为 Long类型
2016-09-28 09:53:05很多同学可能会用上面的方法将int类型转换为Long类型,但事实上这样是不可行的。因为Long是包装类,而int是值类型数据,两者是不能这样强转的。long l = (long)3;int和long都是基本类型的数据,是可以强转的,那么我...
-
理解情感—从Keras移植到pyTorch
-
工作中一些人的观察
-
基于SparkMLPipeline构建机器学习应用
-
81
-
Oracle的时间溯回语句
-
sky-nik.github.io:https:sky-nik.github.io-源码
-
[005]节日庆典PPT模板[
-
HttpModule
-
龙芯实训平台应用实战(希云)
-
深究字符编码的奥秘,与乱码说再见
-
微博深度学习平台架构和实践
-
华为固件包解压工具和img解压工具.rar
-
最新版同城信息分类门户小程序源码
-
数据库连接池
-
程序员必修基础套餐课
-
CGI-610用户手册(修订202008).pdf
-
前端开发:如何正确地跨端?
-
【布道者】Linux极速入门
-
spark大数据分析与实战
-
C++11 14 17 20 多线程从原理到线程池实战