疯狂java笔记:表达式中的陷阱
来源:互联网 发布:mysql workbench使用 编辑:程序博客网 时间:2024/05/16 05:04
字符串:
- 当使用字符串对象时,如果该对象是创建出来的,则在堆中生成一个String对象。如果是直接量,即是使用双引定义的形式,则编译时会将这个字符串内容放到一个字符串池之中。缓存起来供以后多次使用。
- 字符串对象String的内容在其创建出来后就不能改变了。
- 在编译期间可以确定字符串对象String的值才能使用字符串常量池缓存。
- 字符串比较两种形式:调用equals方法和==,区别是前者比较字符内容,后者比较引用是否相同。equals实现是逐个比较各个字符是否相同。还有compareTo(String obj)方法是从左向右比较各个字符,返回值0即说明两者相等。
String实验代码:
类型自动提升:
- 一个算术表达式含有多种数据类型,该表达式中所有的数据类型都会提升到它们之中数据等级最高(所占字节数最大,表达范围最大)的那种类型,最后的运算结果是它们之中等级最高的那个类型。
- 复合赋值运算符经过编译器处理后其实实现了类型的强制转换,即E1 op= E2,相当于E1 = (E1 DateType) E1 op E2
- 将高级的数据类型强制转换为低级数据类型,会产生对原数据的高位截断,即是舍弃高位字节,保留低位字节数据。
- 小数默认为double类型,除非在小数后加上类型标识符,如1.5f。
类型自动提升实验代码:
源码编写错误:
- 全角空格
- 注释中包含unicode转义符/u
- 用unicode转义符表示关键字,不会产生错误,个人觉得是不是可以用来做源码混淆器呢?
泛型错误:
- 可以将原始类型变量赋值给一个带泛型信息的变量,前提是类型保持兼容,例如可以讲List变量赋值到List<Integer>变量中去,因为他们的类型都是List。
- 当程序访问带泛型信息的集合时,总是不关系集合里面的数据类型,访问时执行强制数据类型转换为泛型信息对应的变量。如果不能转换,就会爆出ClassCastException.
- 原始类型的擦除,是指将带泛型信息的变量赋值给一个原始类型,则该变量的类型会转变为泛型类型的上限类型(父类型?)。
- 不允许创建泛型数组,比较隐蔽的错误时一个内部类使用到了外部类的泛型信息,而在外部类方法中创建了内部类数组,会导致编译器提示创建泛型数组错误。
多线程陷阱:
- 启动一个线程要调用start方法,而不是调用run方法。
- 静态同步方法的默认的同步监视器是整个类Class对象。
- 多线程之间要共同读写一个公共的数据,要对这些操作进行同步处理,如关键字synchronized。
静态初始化块启动新进程执行初始化:
注意:静态初始块启动多线程对静态字段进行赋值不是初始化赋值,仅是一次简单的赋值。
- 疯狂java笔记:表达式中的陷阱
- 疯狂Java笔记之表达式中的陷阱
- java 之 表达式中的陷阱
- 关于Java表达式中的陷阱
- 疯狂Java笔记之面向对象的陷阱
- 25、表达式中的陷阱
- 表达式中的陷阱
- java表达式陷阱
- java正则表达式陷阱
- JAVA 条件表达式 陷阱
- java中的引用类型(java疯狂笔记)
- 疯狂Java讲义笔记
- 疯狂Java讲义笔记
- 《疯狂Java讲义》笔记
- 疯狂java学习笔记
- Java面试中的陷阱
- Java面试中的陷阱
- Java面试中的陷阱
- Android放大镜的实现
- 【转】magento安装域名出错Please enter a valid URL. Protocol is required
- 整除11
- Mstr Web客户端安装方式
- Android通过手势实现的缩放处理
- 疯狂java笔记:表达式中的陷阱
- 项目管理 工时管理 敏捷管理 Project Manager 管理软件
- Windows Mobile 常用键值(VK)对应表
- Runtime C# Expression Evaluator
- container_of 理解
- Java 的线程dump
- ubuntu 安装java1.5和 安装 wine1.3
- 与Lua交换自定义数据
- C#动态生成代码——CodeDom