Java String作為引數的情況
layout: post
title: Java String作為引數的情況
date: 2015-05-28
categories: blog
tags: [Java,String]
category: Java
description: java中的String作為引數是需要特別的注意.
String是不可以被修改的
一旦String物件建立之後,我們是不能修改他的值的(這裡的修改是指在記憶體的同一位置).我們可以從JDK的String類裡看到
比如substring()方法
public String substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > value.length) {
throw new StringIndexOutOfBoundsException(endIndex);
}
int subLen = endIndex - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return ((beginIndex == 0) && (endIndex == value.length)) ? this
: new String(value, beginIndex, subLen);
}
在最後,我們發現他返回的String是重新new的一個物件,而不是在原物件的基礎上修改
基本型別做引數傳的是值,物件傳遞的是相當於引用
傳值是不會導致資料的改變的,但是當傳遞的是引用,在方法中改變了物件的某欄位,會導致方法外部的變數也改變
example:
public class Test {
public int i = 0;
public void chaneg(Test t) {
t.i = 10;
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.i);
test.chaneg(test);
System.out.println(test.i);
}
}
output: 0 10
說明在方法內改變變數值導致外部改變
但是對於String當值的改變是,記憶體地址已改變
則相當於下面的example:
public class Test {
public int i = 0;
public void chaneg(Test t) {
t = new Test();//改變記憶體地址
t.i = 10;
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.i);
test.chaneg(test);
System.out.println(test.i);
}
}
output: 0 0
也就是說沒有改變外部的值
總結
當在方法中該變數物件的記憶體地址之後,是不會影響外部的值,但是如果只是改變了某欄位的值,外部的值會跟著改變.
相關文章
- 不重啟mysql情況修改引數變數MySql變數
- String不同定義的情況解析
- Swift 1.1語言函式引數的特殊情況本地引數名外部引數名Swift函式
- Java中main方法引數String[ ] args的使用JavaAI
- mybatis sql foreach 引數的傳入的三種情況!!MyBatisSQL
- 把物件作為引數(轉)物件
- 用JAVA製作微型作業系統4月23日情況Java作業系統
- Java中將方法作為引數傳遞5種方式Java
- SQL中除數為0處理情況演示SQL
- 給一組數,分為兩組,求差最小的情況
- 可以看一下引數情況,分析一下
- 函式作為引數傳遞函式
- golang 方法作為引數傳遞Golang
- 為什麼Java String雜湊乘數為31?Java
- 變數轉化為判斷條件時的各種情況變數
- if 判斷為 false 的 6 種情況False
- java查詢資料庫,int型欄位為null的情況Java資料庫Null
- JITWatch觀察Java JIT情況Java
- 物件,函式作為一個函式的引數物件函式
- mybatis list作為引數 foreach迴圈MyBatis
- JavaScript封裝方法,相容引數型別為Number和StringJavaScript封裝型別
- 關於C++引用做為函式引數和指標作為函式引數C++函式指標
- BASH_SUBSHELL 變數不生效的情況變數
- Java程式異常處理的特殊情況Java
- java語言的各種輸入情況Java
- mybatis sql String>Double, 型別引數被強轉為數值型別MyBatisSQL型別
- axios get請求如果遇到引數有陣列的情況怎麼解決iOS陣列
- 測試在cursor_sharing為force情況下執行計劃的共享情況
- Java記憶體溢位情況Java記憶體溢位
- mybatis 多引數 list和StringMyBatis
- GO語言————6.7 將函式作為引數Go函式
- Cursor 作為引數傳遞並返回結果
- js中bool值為false的幾種情況JSFalse
- php倒數計時出現-0的情況PHP
- AMD MPSoC PS PCIe作為EP與Host在異常狀態下的工作情況
- Go中slice作為引數傳遞的一些“坑”Go
- laravel中whereIn方法中使用SQL作為引數的途徑LaravelSQL
- 設計模式——把類作為引數的抽象工廠模式設計模式抽象