Java局部变量final
2015-12-26 23:19
302 查看
局部变量和形参带final。
在一个线程A中开起另一个线程B,如果线程B要使用线程A的局部变量,那么A的局部变量需要定义成final。理由:局部变量是线程内部共享的,每一个线程内的不能访问其他线程的局部变量,但是上诉的情况却违背了这一原则,那么加上final为什么就可以了呢?原因是加上final之后,在创建B线程的时候会把final标记的变量作为线程B的构造方法的参数传给B,如此一来就解决了此问题,这是一个比较巧妙的做法,通过class文件反编译可以看出这个道理。
另外Java的String变量比较特殊,他所定义的变量的值全部都存放在常量池里面,不管是不是final的。下面的结果全部为true。并且如果相等都指向同一个地址。
基本类型的局部变量如果值相同也都指向同一个地址。只有后面的和前面的不想等的时候才会指向新的地址,这就是为什么基本局部变量相互之间不会影响的原因。
在一个线程A中开起另一个线程B,如果线程B要使用线程A的局部变量,那么A的局部变量需要定义成final。理由:局部变量是线程内部共享的,每一个线程内的不能访问其他线程的局部变量,但是上诉的情况却违背了这一原则,那么加上final为什么就可以了呢?原因是加上final之后,在创建B线程的时候会把final标记的变量作为线程B的构造方法的参数传给B,如此一来就解决了此问题,这是一个比较巧妙的做法,通过class文件反编译可以看出这个道理。
另外Java的String变量比较特殊,他所定义的变量的值全部都存放在常量池里面,不管是不是final的。下面的结果全部为true。并且如果相等都指向同一个地址。
基本类型的局部变量如果值相同也都指向同一个地址。只有后面的和前面的不想等的时候才会指向新的地址,这就是为什么基本局部变量相互之间不会影响的原因。
public class StringTest { private static String s1 = "123"; static final String s2 = "123"; public static void main(String[] args) { String s3 = "123"; final String s4 = "123"; System.out.println(s1 == s2); System.out.println(s3 == s4); System.out.println(s1 == s3); } }
相关文章推荐
- java thread源码分析
- 【跟我学spring 4.0 】之第二节-spring Ioc的概述
- Java中的引用传递
- java环境变量的配置
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(六)之Initialization & Cleanup
- 【跟我学spring 4.0 】之第一节-springhello 的创建
- spring异常
- java中的内部类
- 使用Spring MVC统一异常处理实战
- Struts2中校验配置问题
- java判断string变量是否是数字的六种方法小结
- Eclipse Helios 配置 Android SDK 2.3 和 ADT 0.9.9
- JavaScrip——练习(求整数和、求整数积)
- java开发中fastjson的使用
- (Java)你的日期还在用String吗?
- 解决Maven项目 Missing artifact jdk.tools:jdk.tools:1.7的错误
- Java突击学习 Day1
- Java中类的加载机制---父类和子类的多态调用
- struts2生成验证码图片
- java.lang.String源码分析(2)