从jvm运行机制来分析 String对象负值
测试1:
代码
public class Test {
public static void main(String[] args) {
String s1="aaa";
f(s1);
System.out.println(s1);
}
public static void f(String s2){
System.out.println(s2);
s2="bbb";
}
}
输出结果
aaa
aaa
可以看到 方法f 对字符串的修改是没有意义的;
测试2:
先创建一个实体对象p 设置String 熟悉 n
public class P {
private String n;
public String getN() {
return n;
}
public void setN(String n) {
this.n = n;
}
}
测试类对元测试类进修改:
public class Test {
public static void main(String[] args) {
String s1="aaa";
// f(s1);
// System.out.println(s1);
P p1 = new P();
p1.setN(s1);
f(p1);
System.out.println(p1.getN());
}
public static void f(String s2){
System.out.println(s2);
s2="bbb";
}
public static void f(P p2){
System.out.println(p2.getN());
p2.setN("bbb");
}
}
输出
aaa
bbb
可以看到字符串在测试2中改变了,这是什么原因呢。
首先我们看一下String的特点,入下图从java代码中可以看到String是一个常量是不可改变的,所以每次对String进行修改时起始是创建了一个新的对象。

测试1JVM分析:s1和s2其实都是对字符串“aaa”的引用,s1和s2 都指向内存“aaa” ,当执行 s2="bbb" 时 s2 的地址指向“bbb” ,s1仍然指向“aaa”。

测试2 JVM分析:p1和p2 都是对象P的引用,执行 p2.setN("bbb"); 时对象P 的属性 n 地址从“aaa” 指向到"bbb" ,
所以执行 System.out.println(p1.getN()); 打印出"bbb"。

从jvm运行机制来分析 String对象负值的更多相关文章
- 深入解析java虚拟机-jvm运行机制
转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...
- 02. JVM运行机制
JVM运行机制 JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程
- 2.JVM运行机制 -- JVM序列
上一次写了1.初步认识JVM -- JVM序列,今天接着记录写JVM的运行机制. 一.JVM启动流程 Java平台包括JVM以及Java语言,其中JVM也是运行在操作系统中的一个应用程序进程,那么也应 ...
- .net core系列之《从源码对Configuration的底层运行机制进行分析》
通过对Configuration源代码的分析从而来自定义一个配置数据源 1.用反编译工具来看看AddJsonFile()这个方法究竟干了什么,源代码如下: public static IConfigu ...
- JVM运行时数据区及对象在内存中初始化的过程
JVM运行时数据区 Java虚拟机所管理的内存区域,也称为运行时数据区,分为以下几个运行时数据区,如图所示 程序计数器:当前程序所执行字节码的行号指示器 程序计数器(Program Counter R ...
- Java Jvm运行机制原理
一:简介 在学习Java虚拟机之前,也就是Jvm之前,我想大家能够带着问题去学习,这样的话,大家学习起来也会比较有所获! 1.Java虚拟机(Jvm)是什么? 2.Java虚拟机是用来干什么的? 3. ...
- jvm运行机制与内存管理
http://blog.csdn.net/lengyuhong/article/details/5953544 http://www.cnblogs.com/nexiyi/p/java_memory_ ...
- 探讨JVM运行机制和执行流程
JVM是什么 概述 JVM是Java Virtual Machine的缩写.它是一种基于计算设备的规范,是一台虚拟机,即虚构的计算机. JVM屏蔽了具体操作系统平台的信息(显然,就像是我们在电脑上开了 ...
- jvm运行机制和volatile关键字详解
参考https://www.cnblogs.com/dolphin0520/p/3920373.html JVM启动流程 1.java虚拟机启动的命令是通过java +xxx(类名,这个类中要有mai ...
随机推荐
- Druid.io系列(七):架构剖析
1. 前言 Druid 的目标是提供一个能够在大数据集上做实时数据摄入与查询的平台,然而对于大多数系统而言,提供数据的快速摄入与提供快速查询是难以同时实现的两个指标.例如对于普通的RDBMS,如果想要 ...
- Oracle调优之buffer pool相关
一个oracle block与data buffer中的一个buffer对应.用户进程(server process)负责读取磁盘上的block到data buffer cache中,DEWn进程负责 ...
- wampserver提示You don't have permission to access
在wampserver上单击左键,打开菜单中Apache下的httpd.conf 注视掉以下代码 <Directory “C:/wamp/www”> Deny from all Allo ...
- 3_python之路之商城购物车
python之路之商城购物车 1.程序说明:Readme.txt 1.程序文件:storeapp_new.py userinfo.py 2.程序文件说明:storeapp_new.py-主程序 use ...
- 优化笔记:pfyhparopenfundinfotest_D_20140916.gz
性能瓶颈在函数的乱用.原代码黄色部分. 12分钟->35秒 ------------------------------------------------------------------- ...
- 广义线性模型(Generalized Linear Models)
在线性回归问题中,我们假设,而在分类问题中,我们假设,它们都是广义线性模型的例子,而广义线性模型就是把自变量的线性预测函数当作因变量的估计值.很多模型都是基于广义线性模型的,例如,传统的线性回归模型, ...
- Rhythmk 一步一步学 JAVA (17):Servlet 文件上传
1.环境 : JDK 1.6 , Tomcat 7.0 2.第三方类库: commons-fileupload-1.3.1.jar commons-io-2.4.jar 3.web.xml配置: &l ...
- Android Studio 2.3.3 调用asp.net webService实战(拒绝忽悠)
1.路径中不能包含localhost(本来想在本机调试,就是不行,没办法发布到远程服务器) 2.必须采用异步的办法(阻塞主线程的是肯定不行了) 3.以下是全部的源代码(毫不保留) package co ...
- leetcode341
数据结构设计类题目,参考网上的代码: /** * // This is the interface that allows for creating nested lists. * // You sh ...
- Redis实战——redis主从复制和集群实现原理
出自:https://blog.csdn.net/nuli888/article/details/52136822 redis主从复制redis主从配置比较简单,基本就是在从节点配置文件加上:slav ...