JAVA中char和String/值类型和引用类型的区别
import java.util.*;
class test
{
public static void main(String[] args)
{
char a[] = {'b', 'a', 'c'};
String b = "111";
f(a,b);
System.out.println(Arrays.toString(a)+" "+b);
} public static void f(char[] a, String b) {
a[1] = 'c';
b = "123";
}
}
输出结果为
[b, c, c] 111
为什么a改变了值,而b没有改变?
a是一个数组,按引用传递,在另一个方法里传递a时传递的是a的内存地址,而不是a的副本,所以形参改变时,实参也会跟着改变。
b是按值传递,意味着将b传递给函数时,函数接受的是b的一个副本。因此,如果函数修改了该参数,仅改变副本,原始值不远。
(1)基本数据类型传值,对形参的修改不会影响实参;
(2)引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象;
(3)String, Integer, Double等immutable的类型特殊处理,可以理解为传值,最后的操作不会修改实参对象。
传值是少数,基本数据类型和String是值传递。
传对象的都是传引用。
八大基本类型 short,int,long,float,double,boolean,char
四大引用类型 数组,类,接口,字符串
引用:
JAVA中没有引用传递都是值传递 ,网上讲的好多都是错误的,希望发帖都以后思考后再发:
在 Java 应用程序中永远不会传递对象,而只传递对象引用。因此是按引用传递对象。但重要的是要区分参数是如何传递的,这才是该节选的意图。Java 应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数。参数可以是对象引用,而 Java 应用程序是按值传递对象引用的。
Java 应用程序中的变量可以为以下两种类型之一:引用类型或基本类型。当作为参数传递给一个方法时,处理这两种类型的方式是相同的。两种类型都是按值传递的;没有一种按引用传递。
按 值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味 着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。
当传递给函数的参数不是引用时,传递的都是该值的一个副本(按值传递)。区别在于引用。在 C++ 中当传递给函数的参数是引用时,您传递的就是这个引用,或者内存地址(按引用传递)。在 Java 应用程序中,当对象引用是传递给方法的一个参数时,您传递的是该引用的一个副本(按值传递),而不是引用本身。
Java 应用程序按值传递所有参数,这样就制作所有参数的副本,而不管它们的类型。
基本类型传递的是值的副本,
引用类型传递的是引用的副本。
2017/09/09
遇到了一个问题,即便是String、Integer等类的对象,传进上述函数也无法更改值。
原因:String.,Integer等类的对象里面封装了一个属性value,被private final修饰,即便获取到了对象的引用,依然无法更改对象的属性。
解决方法:通过反射机制来更改。
代码:
import java.util.*;
import java.lang.reflect.*;
class Test
{
public static void main(String[] args) throws Exception
{
Integer i = 123;
Integer j = 456;
f(i,j);
System.out.println(i +" "+ j);
} public static void f(Integer i, Integer j)throws Exception {
int temp = i;
//拿到字节码对象
Class clazz = i.getClass();
Field value = clazz.getDeclaredField("value");
value.setAccessible(true);
value.setInt(i, j);
value.setInt(j, temp);
}
}
JAVA中char和String/值类型和引用类型的区别的更多相关文章
- Java中char和String的相互转换
转自:http://blog.csdn.net/yaokai_assultmaster/article/details/52082763 Java中char是一个基本类型,而String是一个引用类型 ...
- JAVA初学(1):值类型和引用类型的区别
JAVA值类型和引用类型的区别(转) [定义] 引用类型表示你操作的数据是同一个,也就 ...
- JAVA值类型和引用类型的区别
java这两种数据类型分别有哪些? java 中的数据类型分为两大类:值类型(基本数据类型)和引用类型(复合数据类型) 一:值类型: 整数类型(byte,short,int,long) 浮点类 ...
- js中的值类型和引用类型的区别
1.JavaScript中的变量类型有哪些? (1)值类型(基本类型):字符串(String).数值(Number).布尔值(Boolean).Undefined.Null (这5种基本数据类型是按 ...
- JavaScript中值类型和引用类型的区别
JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null和undefined,它们既不是数字也不 ...
- C#中关于值类型和引用类型的区别
小声哔哔 一直以来对于值类型与引用类型之间的区别都不是特别清晰,直到踩了坑.... 正好最新闲暇,便想着梳理梳理这一两年来遇到的奇葩问题和解决方案,顺便就把它给拎出来记一下,免得以后再摔跤 值类型与引 ...
- C#入门篇6-7:字符串操作 看看字符串的特殊之处 值类型与引用类型的区别
//看看字符串的特殊之处值类型与引用类型的区别 public static void CompareString(string stra, string strb, int i) { #region ...
- C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
1.C#类和接口的区别接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽 ...
- C# 值类型和引用类型的区别
C# 值类型和引用类型的区别 1. 值类型的数据存储在内存的栈中:引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址. 2. 值类型存取速度快,引用类型存取速度慢. 3. 值类型表示实 ...
随机推荐
- 高性能NIO框架Netty入门篇
http://cxytiandi.com/blog/detail/17345 Netty介绍 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具 ...
- 51Nod 1049 最大子段和
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1049 #include<iostream> #i ...
- Porsche Piwis Tester 2 Online Coding Guide
Porsche Piwis online programming account service is piwis porsche subscription and piwis tester 2 on ...
- nvidia-docker
参考资料 https://github.com/NVIDIA/nvidia-docker/wiki/Installation#prerequisites https://github.com/NVID ...
- 前端框架VUE----表单输入绑定
vue的核心:声明式的指令和数据的双向绑定. 那么声明式的指令,已经给大家介绍完了.接下来我们来研究一下什么是数据的双向绑定? 另外,大家一定要知道vue的设计模式:MVVM M是Model的简写,V ...
- WTL CHyperLink类的使用(超链接)
1.包含atlctrlx.h头文件: 2.声明一个CHyperLink类的变量: CHyperLink m_linkIntro; 3.在OnInitDialog函数里: m_linkIn ...
- JDK 的配置和反编译工具的使用---------------Java知识点
初始Java 1995年5月,sun公司开发了一门新的编程语言------Java 詹姆斯.高斯林(Java之父),Java语言小巧安全具有可移植可跨平台性的优点. 开发java程序的步骤:编写 ,编 ...
- 关于nginx配置虚拟主机
前提:我的虚拟主机的外网ip为111.231.226.228(是云服务器哈) 本地测试环境为windows7(修改本地的hosts文件) 步骤:(安装nginx可以看看我文章“linux ng ...
- 安装python3.7和PyCharm专业版
安装python3.7 安装PyCharm专业版 1.下载地址http://www.jetbrains.com/pycharm/download/,选择windows下面的Professional,点 ...
- 如何将你的github仓库部署到github pages(转)
原文地址:http://www.cnblogs.com/yuanzm/p/3945814.html#commentform 很多时候我都在思考一个问题,我们每天遇到各种各样的问题,然后我们需要不断go ...