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的赋值与初始化相关推荐

  1. JAVA中重写和实现的区别_Java中重载和重写的区别

    Java中重载和重写的区别 1.1重载是什么 Overloading   方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型 1.2为什么用重载 重载 ...

  2. java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  3. Java传统的io和nio区别_Java中IO和NIO的本质和区别

    简介 终于要写到java中最最让人激动的部分了IO和NIO.IO的全称是input output,是java程序跟外部世界交流的桥梁,IO指的是java.io包中的所有类,他们是从java1.0开始就 ...

  4. java中int和integer的区别_Java异常中throw和throws关键字的区别

    Java中常常弄混的两个关键字,throw和throws,它们有什么区别呢?如何记忆他们,而不至于出错呢? throw和throws 区别 throws:出现在方法的签名中,声明当前方法可能抛出的所有 ...

  5. java中堆与栈的区别_java中堆和栈的区别分析

    堆和栈是Java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

  6. java字符流和字节流的区别_java字符流与字节流的区别是什么

    java中字符流与字节流的区别: 1.字节流操作的基本单元为字节:字符流操作的基本单元为Unicode码元. 2.字节流默认不使用缓冲区:字符流使用缓冲区. 3.字节流通常用于处理二进制数据,实际上它 ...

  7. java 策略模式和工厂模式区别_Java编程细节——什么是策略模式

    策略模式应该是Java设计模式中最简单的一种模式, 它的核心思想是,一个类的行为可以在运行时动态改变,有不同的实现逻辑. 其实具体的说,它也是基于面向接口编程的思想,通过定义不同的实现类逻辑来做到的. ...

  8. java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别

    对于JDK8而言,有三种实现对象比较的方法: 1.在需要比较的对象类中覆写Object类的equals()方法: 2.需要比较的类继承Comparable接口,然后在其类内部实现compareTo() ...

  9. java依赖和约束有啥区别_Java – Maven依赖关系太多了

    我一直在尝试设置最简单的简单hibernate应用程序,并且除了我平庸的思维方式之外,我无法让它运行. Maven很简单 – 在构建路径中添加依赖项,更新项目,blah blah blah yadda ...

最新文章

  1. 自定义View步骤学习笔记
  2. Node.js 切近实战(八) 之Excel在线(文件权限)
  3. Java yield详解_Java 中的 yield 关键字
  4. 删除文件夹时需要SYSTEM权限,简单解决
  5. python中的匿名函数lambda
  6. 蛋白结构建模与优化_最终幻想: 无中生有的蛋白质从头设计
  7. text-indent的用法
  8. 2016030206 - mysql常用命令
  9. 【jvm】jvm优化 jvm linux 大页
  10. python螺旋圆的绘制_亦明图记:SolidWorks绘制扭转弹簧,使用组合曲线作为扫描路径...
  11. 低版本 android 软件下载,纳米盒旧版本下载-纳米盒旧版下载4.1安卓版-西西软件下载...
  12. 利用jad 反编译class文件
  13. linux 提取网卡驱动,linux(ubuntu18.04)系统上安装RTL8822CE网卡驱动
  14. [转] slave_exec_mode=IDEMPOTENT的行为小结
  15. Rhino 3D旋转
  16. Java面试题中高级,nasdocker有啥好玩的
  17. VB winsock介绍
  18. s ss ss ss ss ss ss ss ss ss ss ss ss ss s
  19. ASP.NET MVC 音乐商店 - 0 概览
  20. synplify pro 201203分享下载

热门文章

  1. 上周热点回顾(12.22-12.28)
  2. matlab 光平面标定代码,线结构光视觉传感器/线激光深度传感器标定工具(matlab)...
  3. ThinkPad T460s BIOS设置实现U盘启动
  4. Android Studio之Error:(158) Error: Expected resource of type id [ResourceType]
  5. Mac苹果电脑怎样安装Python
  6. CoderForces999C-Alphabetic Removals
  7. NOIP2016普及组复赛第一题——买铅笔
  8. Rust 最受喜爱却少有人用,Python 仅排第六,2021 全球开发者调查报告出炉
  9. 使用信用卡 要避开这些陷阱
  10. bulldog2 靶机渗透