String类编译期与运行期分析

字符串与字符串相加--字符串拼接时,有哪些特殊的地方?

在编译期与运行期这2个期间,字符串有何特点?

1、String s = "s1";

String s1 = "s"+1;

System.out.println(s=s1);

运行结果:true

编译期时,能确定s1的值--因为s是常量,1也是常量。在编译时,s1的值就已经等于s1了。

所以,输出时,s1对象不会创建,直接指向s所指的这个对象。

2、String s = "s1";

int ss = 1;

String s1 = "s"+ss;

System.out.println(s=s1);

运行结果:false

s和ss在编译期能确定值,但s1不能确定值。

对于s1这条语句来说,ss是一个变量。--变量必须在运行期才会确定其值运行到ss变量处才会确定其值。于是,s1在运行期后才会确定其值。

结论:在编译期时能确定其值的,可“=”;编译期不能确定其值的,不可“=”。

3、String c = "c1";

final int cc = 1;

String c1 = "c"+cc;

System.out.println(c=c1);

运行结果:true

在编译期,c,cc,c1都是确定的。cc之前加了final,就将变量变成为常量。即编译期时,cc这个变量是用1来代替了。

4、String d = "d1";

final int dd = getDD();

String d1 = "d"+dd;

System.out.println(d=d1);

public static int getDD(){

return 1;

}

运行结果:false

“=”对于对象而言,是比较“内存地址”。

虽然,dd之前加了final,但是要执行这句话之后,方法才能有返回值,即运行期才能确定其值,所以,编译期是不能确定dd的值的。

时间: 2024-12-11 00:49:43

String类编译期与运行期分析的相关文章

深入分析Java的编译期与运行期

不知大家有没有思考过,当我们使用IDE写了一个Demo类,并执行main函数打印 hello world时都经历了哪些流程么? 想通过这篇文章来分析分析Java的执行流程,或者换句话说想聊聊Java的编译期与运行期的流程. 开门见山 编译期间都做了什么 运行期间都做了什么 1. 开门见山 public class MyApp { public static void main(String[] args) { System.out.println("hello world"); } }

c++ 编译期与运行期总结

分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 转自:http://hi.baidu.com/zhaoyong200518/item/8516dc59a65be1968d12edff c++ 编译期与运行期总结 一 见识编译期的力量 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #in

constexpr:编译期与运行期之间的神秘关键字

Scott Meyers在effective modern c++中提到"If there were an award for the most confusing new word in C++11, constexpr would probably win it." 由此可见,constexpr确实是比较难以让人理解.加之其在C++11和14中的标准略有不同,也加剧了这种难度. 参考几本经典教材(C++ primer, effective modern C++, a tour of

java 19 - 4 编译期异常和运行期异常的区别

1 /* 2 编译时异常和运行时异常的区别 3 编译期异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译 4 运行期异常:无需显示处理,也可以和编译时异常一样处理 5 */ 6 import java.text.ParseException; 7 import java.text.SimpleDateFormat; 8 import java.util.Date; 9 public class ExceptionDemo { 10 public static void main(

异常-编译期异常和运行期异常的区别

1 package cn.itcast_03; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 /* 8 * 编译时异常和运行时异常的区别 9 * 编译期异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译 10 * 运行期异常:无需显示处理,也可以和编译时异常一样处理 11 */ 12 public class Except

String类中intern方法的原理分析

一,前言 ? 昨天简单整理了JVM内存分配和String类常用方法,遇到了String中的intern()方法.本来想一并总结起来,但是intern方法还涉及到JDK版本的问题,内容也相对较多,所以今天就弥补昨天缺失的知识点. 二,String.intern() ? 先来看下网上流行的关于intern()方法的示例代码: public static void main(String[] args) { String s = new String("1"); s.intern(); St

Javac早期(编译期)

从Sun Javac的代码来看,编译过程大致可以分为3个过程: 解析与填充符号表过程. 插入式注解处理器的注解处理过程. 分析与字节码生成过程. Javac编译动作的入口是com.sun.tools.javac.main.JavaCompiler类,上述3个过程的代码逻辑集中在这个类的compile()和compile2()方法中,整个编译最关键的处理就由图中标注的8个方法来完成,下面我们具体看一下这8个方法实现了什么功能. 解析与填充符号表 解析步骤由上图中的parseFiles()方法(过程

JVM总结(六):早期(编译期)优化

这节我们来总结一下JVM编译器优化问题. JVM编译器优化 Javac编译器 Javac的源码和调试 解析与填充符号表 注解处理器 语法分析与字节码生成 Java语法糖 泛型和类型擦除 自动装箱.拆箱与遍历循环 条件编译 JVM编译器优化 JVM的编译器可以分为三个编译器: 1.前端编译器:把.java转变为.class的过程.如Sun的Javac.Eclipse JDT中的增量式编译器(ECJ). 2.JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1.C2编译器. 3.A

早期(编译期)优化

相当多新生的java语法特性,都是靠编译器的“语法糖”来实现,而不是依赖虚拟机的底层改进来支持,java中即时编译器地运行期的优化过程对于程序运行来说更重要,而前端编译器在编译期的优化过程对于程序编码来说关系更加密切. Javac编译器 编译过程大致可以分为3个过程,分别是解析与填充符号表过程,插入式注解处理器的注解处理过程,分析与字节码生成过程.其步骤之间的关系与交互顺序如图所示: 解析与填充符号表 解析步骤包括词法分析和语法分析两个过程.词法分析是将源代码的字符流转变为标记(Token)集合