java的初始化和赋值的区别_Java的赋值与初始化
zhangleispirit@gmail.com
Java的赋值和初始化包括很多容易被忽视的地方,在此分类总结如下:
1.和赋值相关:
基本类型的赋值运算需要注意的是赋值时的类型转换问题,什么时候可以自动转换,什么时候需要强制类型转换是需要弄清楚的。
首先记住两个约定:
(1)所有的字面整数都是int型的。
(2)所有的字面浮点数都是double型的,因此声明一个float 型的浮点数,必须做类型转换,或者声明时加上f。float ads=3.13f。
第一条:一个占用int或更短长度的表达式的结果总是一个int,也就是两个byte型的结果加到一起,结果是int。举个例子,下面的代码是会出编译错误的:
byte b=3;
byte c=8;
byte d=b+c;
b+c的结果是一个int型的值,而d是一个byte型的值,转换时向着范围比较小进行转换,编译器是会报错的,如果显示的强制类型转换,则不会出问题。
从小范围到大范围的转换是不需要显示强制转换的,包括从long型向float和double型的。
当编译器知道过大而无法被变量保存的字面值赋给变量,将会得到编译错误。
byte a=128;
注意有几个运算符在类型转换的特殊地方。
+=,-=,*=,/=这几个运算符都将使用隐式的强制类型转换。
byte b=3;
b+=7;//这时是正确的。
2和初始化有关:
(1)对于实例变量,都会初始化成默认值。对于对象引用类型的实例变量,其初始值是null。
(2)数组对象比较特殊,数组是一个对象,数组元素总是被赋予默认值,不论数组实在哪里声明和实例化,即使该数组是局部变量都是如此。如果数组元素是对象的引用,则默认值为null,如果数组元素是基本类型,则默认值是基本类型的默认值。
(3)局部变量是没有默认值的,不论是基本类型,还是对象的引用,因此,任何局部变量在使用之前都必须显式的作初始化,否则会出现编译错误。
(4)对象的引用相互赋值,并不修改对象本身(String对象除外)。
(5)对于String对象,要记住这样几点,String对象的值是不可以改变的,因此,下面的例子看起来似乎很矛盾:String str="zhanglei";
String str2=str;
str=str+" ,how are you?";
语句的详细解释如下:
首先在堆中创建一个String对象“zhanglei”,然后让对象引用str指向这个对象,第二条语句将对象引用str赋给str2对象引用。第三条语句将对象“zhanglei”和对象“how are you ?”做连接操作,生成一个新的对象,然后把这个对象的引用赋给str。因此,此时如果打印str2的内容还是“zhanglei”。
(6)初始化块:初始化块分为两种:静态初始化块和实例初始化块;
静态初始化块用来初始化类中的static属性成员,实例初始化块用来初始化实例属性成员。
第一次加载类时,会运行静态初始化块,没创建一个新的实例,就会运行一次实例初始化块。实例初始化块的运行是在所有的超类构造函数运行之后。静态初始化块是在所有超类构造函数之前运行。多个初始化块并存时,运行的顺序即他们在类文件中出现的顺序。
java的初始化和赋值的区别_Java的赋值与初始化相关推荐
- JAVA中重写和实现的区别_Java中重载和重写的区别
Java中重载和重写的区别 1.1重载是什么 Overloading 方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型 1.2为什么用重载 重载 ...
- java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
- Java传统的io和nio区别_Java中IO和NIO的本质和区别
简介 终于要写到java中最最让人激动的部分了IO和NIO.IO的全称是input output,是java程序跟外部世界交流的桥梁,IO指的是java.io包中的所有类,他们是从java1.0开始就 ...
- java中int和integer的区别_Java异常中throw和throws关键字的区别
Java中常常弄混的两个关键字,throw和throws,它们有什么区别呢?如何记忆他们,而不至于出错呢? throw和throws 区别 throws:出现在方法的签名中,声明当前方法可能抛出的所有 ...
- java中堆与栈的区别_java中堆和栈的区别分析
堆和栈是Java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...
- java字符流和字节流的区别_java字符流与字节流的区别是什么
java中字符流与字节流的区别: 1.字节流操作的基本单元为字节:字符流操作的基本单元为Unicode码元. 2.字节流默认不使用缓冲区:字符流使用缓冲区. 3.字节流通常用于处理二进制数据,实际上它 ...
- java 策略模式和工厂模式区别_Java编程细节——什么是策略模式
策略模式应该是Java设计模式中最简单的一种模式, 它的核心思想是,一个类的行为可以在运行时动态改变,有不同的实现逻辑. 其实具体的说,它也是基于面向接口编程的思想,通过定义不同的实现类逻辑来做到的. ...
- java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别
对于JDK8而言,有三种实现对象比较的方法: 1.在需要比较的对象类中覆写Object类的equals()方法: 2.需要比较的类继承Comparable接口,然后在其类内部实现compareTo() ...
- java依赖和约束有啥区别_Java – Maven依赖关系太多了
我一直在尝试设置最简单的简单hibernate应用程序,并且除了我平庸的思维方式之外,我无法让它运行. Maven很简单 – 在构建路径中添加依赖项,更新项目,blah blah blah yadda ...
最新文章
- 自定义View步骤学习笔记
- Node.js 切近实战(八) 之Excel在线(文件权限)
- Java yield详解_Java 中的 yield 关键字
- 删除文件夹时需要SYSTEM权限,简单解决
- python中的匿名函数lambda
- 蛋白结构建模与优化_最终幻想: 无中生有的蛋白质从头设计
- text-indent的用法
- 2016030206 - mysql常用命令
- 【jvm】jvm优化 jvm linux 大页
- python螺旋圆的绘制_亦明图记:SolidWorks绘制扭转弹簧,使用组合曲线作为扫描路径...
- 低版本 android 软件下载,纳米盒旧版本下载-纳米盒旧版下载4.1安卓版-西西软件下载...
- 利用jad 反编译class文件
- linux 提取网卡驱动,linux(ubuntu18.04)系统上安装RTL8822CE网卡驱动
- [转] slave_exec_mode=IDEMPOTENT的行为小结
- Rhino 3D旋转
- Java面试题中高级,nasdocker有啥好玩的
- VB winsock介绍
- s ss ss ss ss ss ss ss ss ss ss ss ss ss s
- ASP.NET MVC 音乐商店 - 0 概览
- synplify pro 201203分享下载
热门文章
- 上周热点回顾(12.22-12.28)
- matlab 光平面标定代码,线结构光视觉传感器/线激光深度传感器标定工具(matlab)...
- ThinkPad T460s BIOS设置实现U盘启动
- Android Studio之Error:(158) Error: Expected resource of type id [ResourceType]
- Mac苹果电脑怎样安装Python
- CoderForces999C-Alphabetic Removals
- NOIP2016普及组复赛第一题——买铅笔
- Rust 最受喜爱却少有人用,Python 仅排第六,2021 全球开发者调查报告出炉
- 使用信用卡 要避开这些陷阱
- bulldog2 靶机渗透