Java数据类型和对象的引用
在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数据类型和对象的引用的更多相关文章
- “吃人”的那些Java名词:对象、引用、堆、栈
记得中学的课本上,有一篇名为<狂人日记>课文:那时候根本理解不了鲁迅写这篇文章要表达的中心思想,只觉得满篇的“吃人”令人心情压抑:老师在讲台上慷慨激昂的讲,大多数的同学同我一样,在课本面前 ...
- java定义类 对象,引用,指针
java是根据面向对象编程,因此有类和对象的概念,类分为普通类与抽象类. 一.定义类 类由N个 构造器 成员变量 方法组成,可以不定义,也可以根据语法定义N个. [修饰符] class 类名{ 构 ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- Java中的对象和引用
<Java编程思想>中有一段关于对象的说法: "按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,'类'就是'类型'的同义词." 简 ...
- java中的对象 方法 引用 等一些抽象的概念是什么意思呢?
2020-03-14 最近这一段时间有点忙,好久都没有更新博客了,之后我会一直坚持下去的,和大家一同进步的. 这段时间一直在学java,相信刚开始学习java的小白,刚开始接触那么些抽象的概念一定和我 ...
- Java基础必备 -- 堆栈、引用传值、垃圾回收等
在Java中,对象作为函数参数的传递方式是值传递还是引用传递?String str = "abc" 与 String str = new String("abc&quo ...
- Java:传值还是传引用?
这是一个Java的经典问题,大部分人从C,C++语言入门,C语言有三种传递方式:值传递,地址传递和引用传递.详细的对C语言指针,引用的我个人的理解,见链接. Java所有操作都是传值操作!都是传值操作 ...
- Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一)
勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 本文导图: 一.由一个提问引发的思考 在Stack Overflow 看到这样一个问题 ...
- JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用
JAVA之旅(十八)--基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用 JAVA把完事万物都定义为对象,而我们想使用数据 ...
随机推荐
- 修改linux系统时间的方法(date命令)
修改linux系统时间的方法(date命令) 来源:互联网 作者:佚名 时间:11-18 23:22:27 [大 中 小] date命令不仅可以显示系统当前时间,还可以用它来修改系统时间,下面简单的介 ...
- wordpress 自定义面板显示不了挂件区问题
刚才在写一个wordpress主题,遇到一个问题.注册好的挂件区在控制面板(dashboard)上显示,在自定义面板上却不显示. 查询了下,发现几个老外朋友也遇到了这个问题: http://wordp ...
- SET ? DECLARE
http://dev.mysql.com/doc/refman/5.7/en/declare-local-variable.html http://dev.mysql.com/doc/refman/5 ...
- 学习之道-从求和起-求和曲线面积瞬时速率极限微积分---求和由高解低已知到未知高阶到低阶连续自然数的K次方之和
数学分析 张筑生
- Listener-监听器+ServletContext+ApplicationContext
参考资料 ServletContext和ApplicationContext有什么区别 ServletContext:是web容器的东西, 一个webapp一个, 比session作用范围要大, 从中 ...
- maven--composer---setting.xml(updatepolicy)---mvn install , mvn deploy
场景:最近再整系统的自动部署流程,由于公司的jar包在svn以及mvn的仓库上都存在,开发人员在开发的过程中都依赖mvn仓库中的Jar 包,在jar上线的时候,配置管理人员把jar 从svn管理的工作 ...
- mysql integer size 大小
I was always wondering what the size of numeric columns in MySQL was. Forgive me if this is obvious ...
- SMART Goals
Once you have planned your project, turn your attention to developing several goals that will enable ...
- C#中jQuery Ajax实例(一)
目标:在aspx页面输入两参数,传到后台.cs代码,在无刷新显示到前台 下面是我的Ajax异步传值的第一个实例 1.前台html代码: <html xmlns="http://www. ...
- LeetCode Search a 2D Matrix II
原题链接在这里:https://leetcode.com/problems/search-a-2d-matrix-ii/ Write an efficient algorithm that searc ...