java 引用传递和值传递
1.为什么要分值传递和引用传递:
基本类型存在在栈中,复合类型(对象)存在堆中。操作栈的速度要快于堆,且对象的复制相比基本类型不仅浪费内存而且速度比较慢。
从这里就可以看出来:对象是按照引用传递(数据库事务封装Connection对象传递的时候最能体现这点);基本类型是按照值传递。
2.那为什么String类型传递后会表现的值传递的特性:这并不是由于值传递而导致的,而是由于String类的不可变性(只读特性)导致的。String类型按照引用传递,但是一旦改变了,就变成新的对象了,原来引用指向的对象还是不变的。String的不可变性可以通过源码看出来,value由final修饰,同样的基本类型的封装类型Integer,Double等同样是不可变的。
3.字符串直接赋值和用new出的对象赋值的区别仅仅在于存储方式不同。传递的方式都是按照引用传递(java 编程思想也是这么解释的)
4.重载(一个操作符,在应用于特定的类时,会被赋予特殊的含义)的操作符+会用StringBuilder优化,比如:String s = "a"+"ab"+"cc";其实就一个StringBuilder调用append方法,将结果赋值给s。但是这并不意味这可以滥用+号来连接字符串。从上面的例子可以看出一次拼接(;号结束,把结果赋值给一个变量)就创建一个StringBuilder对象。所以+号连接只能用在简单的连接时,如果连接发生在循环中,就意味着随着循环的进行会创建大量StringBuilder对象,来完成最后的结果,而创建对象是一个十分耗时的操作,这样就会花长时间执行拼接,降低程序效率,所以这种时候,我们就要通过在循坏前显示的创建StringBuilder对象在循环中显示调用append对象来拼接字符串,不再依赖编译器的优化
5.String s1 = "aa" , String s2 = "aa" 这个时候s1==s2是正确的,“aa”存放在常量池中,是同一个。但是String s1 = new String(“aa”),String s2 = new String(“aa”)此时s1==s2 是false的 ,是在堆中的不同对象。也就是这俩种获得字符串的方式是不一样的。
java 引用传递和值传递的更多相关文章
- 理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习 ...
- 1、探究java方法参数传递——引用传递?值传递!
原创博文,转载请注明出处.谢谢~~ java程序运行时,其对象是怎么进行放置和安排的呢?内存是怎么分配的呢?理解好这个很有好处!java有5个地方可以存储数据: 1.寄存器.这是最快的存储区,位于处理 ...
- Java Object 引用传递和值传递
Java Object 引用传递和值传递 @author ixenos Java没有引用传递: 除了在将参数传递给方法(或函数)的时候是"值传递",传递对象引用的副本,在任何用&q ...
- Java面向对象-方法的值传递和引用传递
Java面向对象-方法的值传递和引用传递 0 发布时间:『 2016-08-21 14:21』 博客类别:Java核心基础 阅读(197) 评论(0) Java面向对象-方法的值传递和引用传递 方 ...
- (转载)理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天 ...
- java到底是引用传递还是值传递?
今天我们来讲讲一个在学习中容易误解的问题,面试中也偶尔问到,java方法调用时到底是值传递还是引用传递? 首先,请大家来做一个判断题,下面的3个问题是否描述正确 1. java基本数据类型传递是值传递 ...
- Java中的引用传递和值传递
Java中的引用传递和值传递 关于Java的引用传递和值传递,在听了老师讲解后,还是没有弄清楚是怎么一回事,于是查了资料,所以在这里与大家分享,有不对的地方,欢迎大家留言. java中是没有指针的,j ...
- Java中没有引用传递只有值传递(在函数中)
◆传参的问题 引用类型(在函数调用中)的传参问题,是一个相当扯的问题.有些书上说是传值,有些书上说是传引用.搞得Java程序员都快成神经分裂了.所以,我们最后来谈一下“引用类型参数传递”的问题. 如下 ...
- Java千百问_05面向对象(011)_引用传递和值传递有什么差别
点击进入_很多其它_Java千百问 1.什么是值传递 值传递,是将内存空间中某个存储单元中存放的值,传送给还有一个存储单元.(java中的存储单元并不是物理内存的地址,但具有相关性) 比如: //定义 ...
- java 传参方式--值传递还是引用传递
java 传参方式--值传递还是引用传递 参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用 ...
随机推荐
- Big Number-Asia 2002, Dhaka (Bengal) (计算位数)题解
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 51nod 1082 与7无关的数
暴力 打表过的 注意爆int 还有 7的倍数 和 数字中有7的 #include<bits/stdc++.h> using namespace std; typedef long long ...
- java 类构造器中加入有参构造器及调用顺序【思路】
package com.ykmimi.new1; /** * * @author deadzq * */ public class AnyThing { public AnyThing() { thi ...
- Mac升级到EI Captain之后pip install 无法使用问题
错误log: creating /System/Library/Frameworks/Python.framework/Versions/2.7/share error: could not crea ...
- 【TCP/IP详解 卷一:协议】TCP的小结
前言:TCP学习的综述 在学习TCP/IP协议的大头:TCP协议 的过程中,遇到了很多机制和知识点,详解中更是用了足足8章的内容介绍它. TCP协议作为 应用层 和 网络层 中间的 传输层协议,既要为 ...
- jenkins网页报错,Unable to create the home directory ‘/usr/share/tomcat7/.jenkins’. This is most likely a permission problem
cd /usr/share/tomcat7 sudo mkdir .jenkins sudo chown tomcat7:nogroup .jenkins 执行以上操作,重启解决
- django 接口编写的配置
一.修改settings文件 ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ 'corsheaders' ] #加入该app 安装django-cors-hea ...
- python 元组列表合并
#create a tuple l = [(,), (,), (,)] print(list(zip(*l)))
- Ubuntu14.04 server (amd64)修改源
1.备份原来的源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2.修改源 sudo vi /etc/apt/sources.li ...
- signal_windows
1.Qt532(vs2010 opengl) // ZC: windows signal: // http://blog.csdn.net/mergerly/article/details/79521 ...