在Java中,变量分为两类:

1.基本类型变量,java是传递的副本

2.一切对象型变量,传引用副本的实质是复制指向地址的指针

a.基本类型引用

public class BasicTransmit {

	public static void test(boolean test){
test =! test;
System.out.println("in test : test = "+test);
} public static void main(String[] args) {
boolean test = true;
System.out.println("Before test : test = "+ test);
test(test);
System.out.println("After test : test = "+test); //在java中,对于基本类型变量(int,long,double,float,byte,boolean,char)
//java 是传值的副本.
}
}

运行结果是:

Before test : test = true
in test : test = false
After test : test = true

b.对象的引用(String不是基本数据类型,而是对象)

public static void test (StringBuffer str){
str.append(",wrold!");
} public static void main(String[] args) {
StringBuffer string = new StringBuffer("Hello");
test(string);
System.out.println(string);
//意料之中,String是一个引用,java对于引用形式传递对象类型的变量是,实际上是将引用
//作为一个副本传递方法函数.那么这个函数里面的引用副本所指向的是什么?
//是对象的地址,通过引用副本找到地址并修改地址的值,也就修改了对象的值
}

运行结果:Hello,wrold!

public static void test (String str){
str = "world";
} public static void main(String[] args){
String string = "Hello";
test(string);
System.out.println(string);
} //为什么会这样呢?这是因为当执行str="world"时,过程为:首先系统会自动生成应新的string对象
//并把这个新对象的值设为"world",然后把这个对象的引用赋给str
//理解:为str这个钥匙原来是指向"hello"这个仓库的,但是现在要求str这个钥匙重新指向"world"
//我们必须清楚一点是:String类是final类型的,因此,你不可以继承和修改这个类.
//str="world",其实是隐含地让java生成一个新的String对象,既然对象都是新的,那就与原来的
//"Hello"没有任何关系.
//当函数结束,str作用消失,原来的内存地址上的内容未加改变,所以打印结果仍然是Hello //StringBuffer产生的一块内存空间,相关的增删改操作都在其中进行,所以为其添加一句"world"
//仍然是在同一段内存地址上进行的,str所值向的引用并没有改变.

c.对象的引用

public class ValueTest {

	public void first(){
int i = 5;
Value v = new Value();
v.i = 25;
second(v ,i);
System.out.println(v.i);
} public void second(Value v ,int i){
i = 0;
v.i = 20;
Value val = new Value();
v= val;
System.out.println(v.i + "" + i);
} public static void main(String[] args) {
ValueTest t = new ValueTest();
t.first();
}
} class Value{
public int i = 15;
}

  结果是:15 0 20

总结:在java中无论是基本数据类型还是对象都是引用的副本或者地址的副本,当返回本函数是,值是没有变化的.除非在函数运行中已经把本地址指向的空间内的值修改了.

Java数据类型和对象的引用的更多相关文章

  1. “吃人”的那些Java名词:对象、引用、堆、栈

    记得中学的课本上,有一篇名为<狂人日记>课文:那时候根本理解不了鲁迅写这篇文章要表达的中心思想,只觉得满篇的“吃人”令人心情压抑:老师在讲台上慷慨激昂的讲,大多数的同学同我一样,在课本面前 ...

  2. java定义类 对象,引用,指针

    java是根据面向对象编程,因此有类和对象的概念,类分为普通类与抽象类. 一.定义类 类由N个 构造器  成员变量  方法组成,可以不定义,也可以根据语法定义N个. [修饰符] class 类名{ 构 ...

  3. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  4. Java中的对象和引用

    <Java编程思想>中有一段关于对象的说法: "按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,'类'就是'类型'的同义词." 简 ...

  5. java中的对象 方法 引用 等一些抽象的概念是什么意思呢?

    2020-03-14 最近这一段时间有点忙,好久都没有更新博客了,之后我会一直坚持下去的,和大家一同进步的. 这段时间一直在学java,相信刚开始学习java的小白,刚开始接触那么些抽象的概念一定和我 ...

  6. Java基础必备 -- 堆栈、引用传值、垃圾回收等

     在Java中,对象作为函数参数的传递方式是值传递还是引用传递?String str = "abc" 与 String str = new String("abc&quo ...

  7. Java:传值还是传引用?

    这是一个Java的经典问题,大部分人从C,C++语言入门,C语言有三种传递方式:值传递,地址传递和引用传递.详细的对C语言指针,引用的我个人的理解,见链接. Java所有操作都是传值操作!都是传值操作 ...

  8. Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 本文导图: 一.由一个提问引发的思考 在Stack Overflow 看到这样一个问题 ...

  9. JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用

    JAVA之旅(十八)--基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用 JAVA把完事万物都定义为对象,而我们想使用数据 ...

随机推荐

  1. 修改linux系统时间的方法(date命令)

    修改linux系统时间的方法(date命令) 来源:互联网 作者:佚名 时间:11-18 23:22:27 [大 中 小] date命令不仅可以显示系统当前时间,还可以用它来修改系统时间,下面简单的介 ...

  2. wordpress 自定义面板显示不了挂件区问题

    刚才在写一个wordpress主题,遇到一个问题.注册好的挂件区在控制面板(dashboard)上显示,在自定义面板上却不显示. 查询了下,发现几个老外朋友也遇到了这个问题: http://wordp ...

  3. SET ? DECLARE

    http://dev.mysql.com/doc/refman/5.7/en/declare-local-variable.html http://dev.mysql.com/doc/refman/5 ...

  4. 学习之道-从求和起-求和曲线面积瞬时速率极限微积分---求和由高解低已知到未知高阶到低阶连续自然数的K次方之和

    数学分析 张筑生

  5. Listener-监听器+ServletContext+ApplicationContext

    参考资料 ServletContext和ApplicationContext有什么区别 ServletContext:是web容器的东西, 一个webapp一个, 比session作用范围要大, 从中 ...

  6. maven--composer---setting.xml(updatepolicy)---mvn install , mvn deploy

    场景:最近再整系统的自动部署流程,由于公司的jar包在svn以及mvn的仓库上都存在,开发人员在开发的过程中都依赖mvn仓库中的Jar 包,在jar上线的时候,配置管理人员把jar 从svn管理的工作 ...

  7. mysql integer size 大小

    I was always wondering what the size of numeric columns in MySQL was. Forgive me if this is obvious ...

  8. SMART Goals

    Once you have planned your project, turn your attention to developing several goals that will enable ...

  9. C#中jQuery Ajax实例(一)

    目标:在aspx页面输入两参数,传到后台.cs代码,在无刷新显示到前台 下面是我的Ajax异步传值的第一个实例 1.前台html代码: <html xmlns="http://www. ...

  10. LeetCode Search a 2D Matrix II

    原题链接在这里:https://leetcode.com/problems/search-a-2d-matrix-ii/ Write an efficient algorithm that searc ...