String在方法中的传递方式(调用外部方法给String变量赋值时,未得到预期结果)
示例:
public class StringTraining {
public static void changeStr(String str){
str = "137878";
}
public static void main(String[] args){
String a = "b";
changeStr(a);
System.out.println(a);
}
}
输出仍旧为b
分析:首先栈中存的是堆中对象的地址,因为String对象的特殊性(String有自己的常量池),当遇到常量池中没有的字符串时,String会开辟新的内存空间(生成新对象)。实例中,将a的值(“b”的地址)赋值给了str,从而起初示例中a引用指向“b”,str初始值也是指向“b”;然而当给str重新赋值时,str指向了另一个内存空间(即存储的是新字符串的地址,相当于给str重新赋值了),因此str指向“137878”,对a没影响。
情景:当调用外部方法改变String的值是无法生效的,比如我想用外部方法进行参数校验,当某个String类型参数为空或null时,我给这个参数赋一个默认值,这个赋值动作是无效的,因而当用到该参数时,仍旧会报空指针。
String在方法中的传递方式(调用外部方法给String变量赋值时,未得到预期结果)的更多相关文章
- Java:main方法前面一定要加static?在main方法中一定要调用static方法?
今天敲代码的时候发现,出现了这样一个情况: 我在我在main方法中调用了一个函数,并且这个函数没有用static修饰,就像这样: 这样报错了!!! 我虽然学Java 的时间也不多,但这个问题也帮助我更 ...
- HAL中通过JNI调用java方法【转】
转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...
- java 中使用ajax调用后台方法注意事项
java 中使用ajax调用后台方法注意事项,后台方法一定要加@ResponseBody jQuery.validator.addMethod("checkRuleName",fu ...
- C#中添加三个线程同时启动执行某一方法,并依次调用某方法中的循环打印输。
添加三个线程同时启动执行某一方法,并依次调用某方法中的打印输:ABC ABC ABC ABC 实现代码如下: using System; using System.Collections.Generi ...
- window.external 是调用外部方法
ie中,window.external 是调用外部方法,比如,是在 winform 中的 webbrower 中使用 window.external.SendData(),那么,SendData() ...
- js-template-art【四】通过helper方法注册,调用外部方法
一.语法 模板代码中调用外部函数,需要通过helper方法注册 template.helper(name, callback) 二.使用[实例] 原文:http://blog.csdn.net/u01 ...
- WebBrowser执行脚本和调用外部方法
控制WebBrowser实际上就是控制IE,最简单的方法就是执行javascript或vbscript,省去了接口的转换.如何执行脚本?以前我一直用mshtml中IHTMLWindow2接口的exec ...
- 在SQL Server中使用CLR调用.NET方法
介绍 我们一起来做个示例,在.NET中新建一个类,并在这个类里新建一个方法,然后在SQL Server中调用这个方法.按照微软所述,通过宿主 Microsoft .NET Framework 2 ...
- java继承-子类调用父类的方法中包含子类重写的方法
# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了... # 先看代码: public class Common { public static void main(String[] args ...
随机推荐
- C++之vector模板类
vector 称为容器模板类,是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型.vector 类型的每一种都指定 ...
- Windows 10 PC 安装 Docker CE
系统要求 Docker CE 支持 64 位版本的 Windows 10 Pro,且必须开启 Hyper-V. 如果系统是win 10 家庭版安装 docker 很恶心, 我也是废了2天才安装, 由 ...
- AngularJs(Part 9)--AngularJS 表单
AngularJS 表单 AngularJS使用了MVX的结构,我们可以是传统的表单更加强大.比如过去我们得自己写一大堆验证,比过过去我们得自己转换用户的输入, 现在这些工作全部可以交给Ang ...
- [原创]SQL 表值函数:获取从今天计算起往前自定义天数
PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好. 在我开发过程中,遇到一个统计需求,结果是要求返回从当天起往回推算出自定义输入的天数 为此我写了一个表值函数 ...
- Asp.net 微信企业号网页开发流程
一.在pageload方法中获取code var code = GetCode(); private string GetCode() { return HttpContext.Current.Req ...
- 30、 bowtie和bowtie2使用条件区别及用法
转载:http://blog.csdn.net/soyabean555999/article/details/62235577 一.转录组还是基因组? map常用的工具有bowtie/bowtie2, ...
- Python及R安装包版本查看方法
R包查询 查询已安装的所有的包:library() 或installed.packages()(括号内为空,区别以上两项) 查询具体包的信息: help(package="pheatmap& ...
- es6基础系列五--数组的拓展
Array.from() 用于将两类对象转为真正的数组,类似数组对象和可遍历对象(包括数据结构Set和Map)转化为数组 格式:Array.from(arrayLike[, mapFn[, thisA ...
- System.Threading.Thread的使用及传递参数等总结
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 飘逸的python - @staticmethod和@classmethod的作用与区别
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...