java引用类型的类型转换规则是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java引用类型的类型转换规则是啥?相关的知识,希望对你有一定的参考价值。
1引用类型的类型转换只能发生子父子之间;2.子类自动可以转换成父类的对象
3.父类需要强制类型转换才能转换成子类.但是只有父类的引用指向子类对象的时候才能强转成功
4.在强制类型转换前要用instanceof来判断一个对象的类型 参考技术A 举个例子,听不懂
Web | JavaScript的引用数据类型强制转换类型
我在这里主要的想提下的是JavaScript中的引用类型进行强制转换类型.因为对于基本数据类型的变换大多都是雷同的,很容易熟知,但是引用数据类型有一点小插曲.
JavaScript的引用类型主要为对象,数组和函数.主要针对的是对对象和数组进行转换.而转换又包括两种方式,即显式和隐式转换.
显式强制类型转换
首先我们需要一些基本的规则.
基本类型的字符串化规则:
- null ==> ‘null‘
- true ==>‘true‘ ,false ==> ‘false‘
- undefined ==> ‘undefined‘
- 数字也是自身字符串化,1 ==> ‘1‘
基本类型的数字化规则:
- null ==> 0
- undefined ==> NaN
- true ==> 1, false ==> 0
- 字符串会拆开引号,看它是否是数字,是则输出数字,否则输出NaN.如果是空字符串,则会转成0.
不同类型对象的valueof规则:
对象 ==>对象本身
Boolean ==> 布尔值
Number ==> 数字值
String ==> 字符串值
Array ==> 返回数组对象本身
Date ==> 距离1970的毫秒数
Function ==> 函数本身
Math和Error没有valueof方法
通过构造String()化
首先,会调用引用数据类型的tostring()方法,会看该方法是否会返回基本数据类型,如果是就使用.如果不是就会调用valueof方法,返回基本数据类型就使用,如果不是则会报错.
//通过复写其系统方法来观察
// obj,对象
Object.prototype.toString=function () {
return [];
}
Object.prototype.valueOf=function () {
return 456;
}
var obj = {
name:"Jan",
age:18
}
// obj.toString() ---> obj.valueOf()
var res = String(obj);
console.log(typeof res,res);//string '456'
// 数组
Array.prototype.toString=function () {
}
Array.prototype.valueOf=function () {
return 123;
}
var arr =[1,2,3,4];
var res = String(arr);
console.log(typeof res,res);//string undefined
通过构造Number()化
首先,会调用引用数据类型的valueof()方法,会看该方法是否会返回基本数据类型,如果是就使用.如果不是就会调用tostring()方法,返回基本数据类型就使用,如果不是则会报错.
//对数组和对象进行number化
var arr = [1,2,3];
var res = Number(arr); //tostring==>1,2,3
console.log(typeof res,res);//number NaN
Object.prototype.valueOf=function(){
return " 12345 ";
}
var obj ={};
var res = Number(obj);
console.log(typeof res,res);//number 12345
var res = +obj;
console.log(typeof res,res);//number 12345
只有Number()和‘+‘正号才能激发显式number化.
另外提下toPrimitive,它是引用数据类型转基本数据类型.都是先回调用valueof方法,然后才调用tostring方法.
隐式强制类型转换
隐式转换一般是‘+‘符号触发,还有逻辑判断触发
//如果某个操作数是字符串 + 将进行拼接操作
//遇到对象 则ToPrimitive()
Array.prototype.valueOf=function(){
return "1";
}
Array.prototype.toString=function(){
return false;
}
console.log([] + 1); //'11'
(1) if (..) 语句中的条件判断表达式。
(2) for ( .. ; .. ; .. ) 语句中的条件判断表达式(第二个)。
(3) while (..) 和 do..while(..) 循环中的条件判断表达式。
(4) ? : 中的条件判断表达式。
(5) 逻辑运算符 || (逻辑或)和 && (逻辑与)左边的操作数(作为条件判断表达式)
以上是关于java引用类型的类型转换规则是啥?的主要内容,如果未能解决你的问题,请参考以下文章