java类型强转

知乎:

首先基本数据类型不是对象,强转改的是值,分为有损和无损,有损会丢失数据细节。

然后对象,只有继承关系的类才能强转,改变的只是引用,而且向上转型是安全的,把你转为人类是安全的,你还是你,只是现在别人看你是个人类,看不清你的个性化细节,他们能知道的也仅仅局限于人类提供给别人访问的属性和方法,记住你还是你。向下转型是有可能出错的,只要事先知道你是你的情况下才能把人类转成你,如果把另一个人类转成你是必定会报错的。总之改的只是这个对象的引用,对象还是老老实实的待在堆内存中。

作者:知乎用户
链接:https://www.zhihu.com/question/35262854/answer/61990920
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

博客:

http://www.cnblogs.com/chenssy/p/3393160.html

总结

类型转换只要转换的类原来就在内存中存在。引用向下强转和向上转型都是可行的,只是换了指针而已

时间: 2024-10-12 15:21:22

java类型强转的相关文章

scala如何解决类型强转问题

scala属于强类型语言,在指定变量类型时必须确定数据类型,即便scala拥有引以为傲的隐式推到,这某些场合也有些有心无力. 例如:java同属强类型语言,但java可以进行类型强转.因此在进行面向接口编程时,借助类型强转,只要编码没有问题,就可以使用准备使用的class类.但在scala中,这条路就走不通了.因为scala没有类型强壮. 那如何办呢? 众所周知,scala编译后变成字节码文件,运行在jvm中.那么从骨子里,scala可以说是脱胎于java,同样scala可以调用java所有的类

c++第十四章-(类型强转换)

类型强转换有2种. class Company { public: Company(std::string theName,std::string theProduct); virtual void printInfo(); protected: std::string name; std::string product; }; Company::Company(std::string theName,std::string theProduct) { this->name = theName;

oracle中数据类型对应java类型

地址: http://otndnld.Oracle.co.jp/document/products/oracle10g/102/doc_cd/Java.102/B19275-03/datacc.htm#BHCJBJCC SQL数据类型 JDBC类型代码 标准的Java类型 Oracle扩展的Java类型   1.0标准的JDBC类型:     CHAR java.sql.Types.CHAR java.lang.String oracle.sql.CHAR VARCHAR2 java.sql.T

Java中强、软、弱、虚引用

一.前言 忘记之前是怎么接触到Java的强.软.弱.虚引用的了,恍恍惚惚好像是在看垃圾回收的时候,略过了这些个概念~这些知识在平时开发中使用的真是少之又少(也许我的level还不够)~今天就将这些整理完毕吧~ 二.正文 对于Java中这几种引用的理解,有助于理解JVM的回收内存的机制.先说下在JVM执行垃圾回收时,如何处理它们所引用的对象: 1)强引用,任何时候都不会被垃圾回收器回收,如果内存不足,宁愿抛出OutOfMemoryError. 2)软引用,只有在内存将满的时候才会被垃圾回收器回收,

类型强转和字节对齐

当一个较少字节对齐类型的指针强转为一个较多字节对齐的指针类型时,这样有些时候会产生问题. 在arm的平台上,这个问题比较明显,在x86平台上运行后没这个问题 typdef struct { int addr; int rdda; }Test_t; int main() { short int a; short int s[2]; short int *pt = &s; Test_t tt; Test_t *pt = NULL; tt.addr= 0x11223344; memcpy(s,&

Thinking in Java -- 类型信息RTTI

Thinking in Java – 类型信息 个人感觉 java 中的比較难的部分了,在看了些netty源代码发现事实上这块很实用. 这章重点是RTTI和反射.先说下自己的理解 RTTI是执行时识别.在c++中是用virtual来实现的,在编译期会忽略对象的详细类型信息,假定我们已经知道,并在执行时详细识别. Java反射机制实在执行状态中,对于随意一个类,都能够知道这个类的全部属性和方法.对于随意一个对象.都能够调用它的随意一个方法和属性,这样的动态获取的信息以及动态调用对 象的方法的功能称

java类型擦除(Java Type Erasure Mechanism)

在JDK5之后java提供了泛型(Java Genertics),允许在定义类的时候使用类型作为参数.泛型广泛应用于各类集合中.本文对其以及其用法进行介绍. 1.一个常见的错误 下面例子中,用List<Object>类型的参数来接收List<String>. public class Main { public static void main(String[] args) throws IOException { ArrayList<String> al = new

java类型与Hadoop类型之间的转换

java基本类型与Hadoop常见基本类型的对照Long LongWritableInteger   IntWritableBoolean   BooleanWritable String Text Java类型如何转化为Hadoop基本类型? 调用hadoop类型的构造方法,或者调用set()方法. new LongWritable(123L); hadoop基本类型如何转化为java类型? 对于Text,需要调用toString()方法,其他类型调用get()方法. 以后继续,深入

类型强转和地址强转

1 例子 最近在干一个很复杂的事-读4w多行的项目源码,头都大了有木有!其中有一步是加载一个二进制文件,为了更好的理解代码的含义,我需要一点一点解析二进制文件.在解析到某个位置的时候,有个读浮点数的操作,对应的二进制值为:-CAF249F1-.非常好奇这个值对应的浮点数是多少,所以写代码去求解一下.这里我没有犯一个错误:原始的文件中是按照从低字节到高字节排序的,所以实际的数应该为:0xF149F2CA.但是还是犯了很多错误,最初的代码为: void test1() { unsigned int